Пропорционально измените размер битового массива

У меня есть битовый массив... и если бы высота битового массива больше, чем maxHeight, или ширина больше, чем maxWidth, я хотел бы пропорционально изменить размер изображения так, чтобы это поместилось в maxWidth X maxHeight. Вот то, что я пробую:

    BitmapDrawable bmp = new BitmapDrawable(getResources(), PHOTO_PATH);

    int width = bmp.getIntrinsicWidth();
    int height = bmp.getIntrinsicHeight();

    float ratio = (float)width/(float)height;

    float scaleWidth = width;
    float scaleHeight = height;

    if((float)mMaxWidth/(float)mMaxHeight > ratio) {
        scaleWidth = (float)mMaxHeight * ratio;
    }
    else {
        scaleHeight = (float)mMaxWidth / ratio;
    }

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

    Bitmap out = Bitmap.createBitmap(bmp.getBitmap(), 
            0, 0, width, height, matrix, true);

    try {
        out.compress(Bitmap.CompressFormat.JPEG, 100, 
                new FileOutputStream(PHOTO_PATH));
    }
    catch(FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    }

Я получаю следующее исключение:

java.lang.IllegalArgumentException: bitmap size exceeds 32bits

Что я делаю неправильно здесь?

5
задан synic 14 July 2010 в 14:32
поделиться

1 ответ

Ваши scaleWidth и scaleHeight должны быть масштабными коэффициентами (то есть не очень большими числами), но ваш код, кажется, передает фактическую ширину и высоту, которые вы ищете. Таким образом, вы в конечном итоге значительно увеличиваете размер растрового изображения.

Я думаю, что есть и другие проблемы с кодом для получения scaleWidth и scaleHeight. Во-первых, ваш код всегда имеет либо scaleWidth = width , либо scaleHeight = height , и изменяет только один из них, поэтому вы будете искажать соотношение сторон изображения как хорошо. Если вы просто хотите изменить размер изображения, у вас должен быть только один scaleFactor .

Кроме того, почему ваш оператор if фактически проверяет maxRatio> ratio ? Разве вы не должны проверять width> maxWidth или height> maxHeight ?

8
ответ дан 13 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: