#android #bitmap
#Android #растровое изображение
Вопрос:
Я пытаюсь создать растровое изображение из массива int, но все результирующее растровое изображение равно 0.
Сценарий У меня есть приложение, которое берет необработанное изображение, а затем выполняет некоторую постобработку необработанного изображения. После этой обработки я пытаюсь сохранить результирующий массив байтов в виде изображения в формате JPEG, и здесь я преобразую массив в растровое изображение, чтобы его можно было сохранить в формате JPG.
int [] rgbArray = getColor( returnValue ); // converts the image to an int array
Bitmap image = Bitmap.createBitmap( rgbArray, 1008, 758, Bitmap.Config.ARGB_8888 );
Но у image
каждого пикселя установлено значение 0, и результирующий Jpeg весь черный.
Интересно, можете ли вы дать какие-либо указания относительно того, почему это должно быть так?
Я попытался распечатать различные функции get из растрового изображения, чтобы посмотреть, дает ли это какую-либо подсказку.
Bitmap getHeight() 758
Bitmap getWidth() 1008
Bitmap describeContents() 0
Bitmap getByteCount() 3056256
Bitmap getConfig() ARGB_8888
Bitmap isRecycled() false
Bitmap isPremultiplied() true
Bitmap hasAlpha() true
Bitmap getColorSpace() sRGB IEC61966-2.1 (id=0, model=RGB)
Я новичок в программировании на Android, поэтому любые указатели были бы чрезвычайно полезны. Заранее спасибо.
Обновить, если я setPremultiplied( false );
использую растровое изображение, оно работает нормально. Я думаю, что моя непосредственная проблема решена, если я установлю для Premultiplied значение false.
Комментарии:
1. Что делает функция getColor()? Правильно ли оно преобразуется в int[]?
2. По сути, это создает массив из значений RGB
(redValue amp; 0xff) << 16 | (greenValue amp; 0xff) << 8 | (blueValue amp; 0xff);
Я обнаружил, что если я установлюimage.setPremultiplied( false );
, он будет работать нормально3. И полученный массив имеет правильные цвета?
4. Да, у него правильные цвета.
5. Теперь я понимаю, что вы устанавливаете ARGB_8888, но getColor () не возвращает альфа-канал. Возможно, именно поэтому с помощью setPremultiplied работает.