Вращающееся масштабное растровое изображение в качестве и скорости Android

Я узнаю, что когда я использую

CreateBitmap()

ТОЛЬКО для поворота растрового изображения и после этого

createscaledbitmap()

ТОЛЬКО для масштаба в Android SDK, значения растрового изображения (JPEG coeff. в моем случае) изменяются при повороте изображения! (более низкое качество)

Поэтому, вероятно, мне нужно сделать вращение и масштабирование в одной функции вызова createbitmap с объектной матрицей. (может ли кто-нибудь рассказать больше спец. информации о математике в этом случае? Я не могу найти что-нибудь)

В этом коде я пробую его, но он возвращает разные измерения в rotatedBitmap, а не dstWidth,dstHeight; pixelIn:¨

ПРИМЕЧАНИЕ: мне нужен только 1d вектор токена данных,: ВЫХОД

public static int[] getPixels(String pathOfInputImage, int dstWidth,
        int dstHeight) {

    Bitmap resizedBitmap = null;
    InputStream in = null;
    int[] pixelIn;
    boolean filter = false;
    int inWidth = 0;
    int inHeight = 0;
    // calculate the scale - in this case = 0.4f

    try {
        in = new FileInputStream(pathOfInputImage);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if (in == null) {
        Log.v("--------Image ERROR--------",
                "Image ERROR PIXEL FileInputStream( ");

    }
    // decode image size (decode metadata only, not the whole image)
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;
    // options.inDither = true;
    // options.inPreferQualityOverSpeed = true;

    options.inPreferredConfig = Bitmap.Config.ARGB_8888;

    options.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(in, null, options);

    try {
        in.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    in = null;

    // save width and height
    inWidth = options.outWidth;
    inHeight = options.outHeight;

    FileInputStream in2 = null;
    // decode full image pre-resized
    try {
        in2 = new FileInputStream(pathOfInputImage);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Options options2 = new BitmapFactory.Options();
    // options.inDither = true;
    // options2.inPreferQualityOverSpeed = true;

    options2.inPreferredConfig = Bitmap.Config.ARGB_8888;

    // calc rought re-size (this is no exact resize)
    options2.inSampleSize = Math.max(inWidth / dstWidth, inHeight
            / dstHeight);
    // decode full

    System.gc();// /????????????????????????????????
    Bitmap roughBitmap = BitmapFactory.decodeStream(in2, null, options2);

    float scaleWidth = ((float) dstWidth) / inWidth;
    float scaleHeight = ((float) dstHeight) / inHeight;

    if (roughBitmap == null) {
        pixelIn = getPixelsZadniVratka(pathOfInputImage, dstWidth,
                dstHeight);

    } else {
        // calc exact destination size

        PhotoRecord p9 = new PhotoRecord();
        int rot9 = p9.loadRotation(pathOfInputImage).roatate;

        Matrix matrix = new Matrix();
        matrix.postRotate(rot9);
        matrix.postScale(scaleWidth, scaleHeight);

        // Bitmap resizedBitmap2 = Bitmap.createScaledBitmap(roughBitmap,
        // dstWidth, dstHeight, filter);
        // /------------------------------------
        Bitmap rotatedBitmap = Bitmap.createBitmap(roughBitmap, 0, 0,
                roughBitmap.getWidth(), roughBitmap.getHeight(), matrix,
                filter);

        Log.v("--------TAG--------", "JE inWidth PROCESS?????( " + inWidth);
        Log.v("--------TAG--------", "JE getHeight PROCESS?????( "
                + rotatedBitmap.getHeight());
        Log.v("--------TAG--------", "JE getWidth PROCESS?????( "
                + rotatedBitmap.getWidth());
        pixelIn = new int[dstWidth * dstHeight];

        if (rotatedBitmap != null) {
            rotatedBitmap.getPixels(pixelIn, 0, dstWidth, 0, 0, dstWidth,
                    dstHeight);
            rotatedBitmap.recycle();

        } else {
            pixelIn = null;

        }

    }

    return pixelIn;
}

0 ответов

Другие вопросы по тегам