Как повернуть растровое изображение в Android? - PullRequest
0 голосов
/ 14 июня 2019

Мое растровое изображение поворачивается, но перекрывается с исходным изображением.

Источник растрового изображения

public void onImageAvailable(ImageReader reader) {
            final Image image = reader.acquireNextImage();
//            final Image image = reader.acquireLatestImage();
            final ByteBuffer yuvBytes = imageToByteBuffer(image);

            // Convert YUV to RGB
            final RenderScript rs = RenderScript.create(MainActivity.this);

            Bitmap        bitmap     = Bitmap.createBitmap(image.getWidth(), image.getHeight(), Bitmap.Config.ARGB_8888);
            final Allocation allocationRgb = Allocation.createFromBitmap(rs, bitmap);

            final Allocation allocationYuv = Allocation.createSized(rs, Element.U8(rs), yuvBytes.array().length);
            allocationYuv.copyFrom(yuvBytes.array());

            ScriptIntrinsicYuvToRGB scriptYuvToRgb = ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs));
            scriptYuvToRgb.setInput(allocationYuv);
            scriptYuvToRgb.forEach(allocationRgb);

            allocationRgb.copyTo(bitmap);
            int rotation = MainActivity.this.getWindowManager().getDefaultDisplay().getRotation();
            int x = bitmap.getWidth();
            int y = bitmap.getHeight();
            Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, y, x, true);
            Bitmap rotatedBitmap = rotateBitmap(bitmap1, getOrientation(rotation));

RotatedBitmapFunction

public Bitmap rotateBitmap(Bitmap original, float degrees) {
        int width = original.getWidth();
        int height = original.getHeight();

        Matrix matrix = new Matrix();
        matrix.preRotate(degrees);

        Bitmap rotatedBitmap = Bitmap.createBitmap(original, 0, 0, width, height, matrix, true);
        Canvas canvas = new Canvas(rotatedBitmap);
        canvas.drawBitmap(original, 5.0f, 0.0f, null);

        return rotatedBitmap;
    }

выход

Исходное растровое изображение накладывается поверх вращаемого битового карты. enter image description here # * Проблема 1014 *

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

решено

    public Bitmap rotateBitmap(Bitmap original, float degrees) {
        int x = original.getWidth();
        int y = original.getHeight();
        Matrix matrix = new Matrix();
        matrix.preRotate(degrees);
        Bitmap rotatedBitmap = Bitmap.createBitmap(original , 0, 0, original .getWidth(), original .getHeight(), matrix, true);
        return rotatedBitmap;
    }
0 голосов
/ 14 июня 2019

Проверьте эти строки в вашем коде

 Canvas canvas = new Canvas(rotatedBitmap);
canvas.drawBitmap(original, 5.0f, 0.0f, null);

Почему вы рисуете исходное растровое изображение на холсте непосредственно перед возвратом повернутого растрового изображения. Я думаю, что это проблема.

...