#java #android #graphics
#java #Android #графика
Вопрос:
Кто-нибудь может мне помочь с возникшей у меня проблемой с графикой. Этот код вообще не применяет setPolyToPoly .. он выполняет поворот камеры, но не преобразование политополии .. Я не понимаю, почему..
final Camera camera = mCamera;
final Matrix matrix = t.getMatrix();
camera.save();
camera.translate(x, y, z);
camera.getMatrix(matrix);
camera.restore();
matrix.setPolyToPoly(sourceArr, 0, destArr, 0, sourceArr.length >> 1);
matrix.preTranslate(-0, -height);
matrix.postTranslate(0, height);
Ответ №1:
Этот пример не полностью соответствует вашему вопросу, но может направить вас в правильном направлении. В этом примере матрица применяется к растровому изображению, которое отображает перспективу. Если я сравниваю с вашим фрагментом, вы устанавливаете политополию, но она не применяется к камере.
Bitmap bitmap2 = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
Canvas canvas2 = new Canvas(bitmap2);
canvas2.drawColor(Color.WHITE);
Paint rectPaint2 = new Paint();
rectPaint2.setColor(Color.GREEN);
canvas2.drawRect(20, 20, 180, 180, rectPaint2);
Matrix matrix2 = new Matrix();
float deform2 = 20f;
float[] src2 = new float[] { 0, 0, bitmap2.getWidth(), 0, bitmap2.getWidth(), bitmap2.getHeight(), 0, bitmap2.getHeight() };
float[] dst2 = new float[] { 0, 0, bitmap2.getWidth() - deform2, deform2, bitmap2.getWidth() - deform2, bitmap2.getHeight() - deform2, 0, bitmap2.getHeight() };
matrix2.setPolyToPoly(src2, 0, dst2, 0, src2.length >> 1);
Bitmap bMatrix2= Bitmap.createBitmap(bitmap2, 0, 0, bitmap2.getWidth(), bitmap2.getHeight(), matrix2, true);
ImageView ivSecond = (ImageView) findViewById(R.id.ivSecond);
ivSecond.setImageBitmap(bMatrix2);
Комментарии:
1. Почему у вас есть «src2.length >> 1» ? разве это не должно точно соответствовать длине массива?
2. pointCount Количество пар / точек, которые будут использоваться. Должно быть [0..4] Это количество пар, а не количество записей.
3. К вашему сведению, «>> 1» отбрасывает младший значащий бит, эффективно делясь на 2. Точно так же, как удаление младшей значащей цифры в числе с основанием 10 делит на 10. Например, 120, удаление нуля равно 12.