Bitmap.CreateBitmap имеет все пиксели, установленные в 0

#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 работает.