2017-02-11 21 views
0

Сначала я установил все пиксели с нулевым альфа-каналом.android bitmap getPixels return 0 at zero alpha Pixels

bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(bitmap); 
// draw somethings in the bitmap... 

bitmap.getPixels(pixs, 0, w, 0, 0, w, h); 
for(int i=0;i<pixs.length;i++) { 
    pixs[i] = pixs[i] & (0x00ffffff); 
} 

следующее: я помещаю эти пиксели в растровое изображение, а затем снова вызываю getPixels.

bitmap.setPixels(pixs, 0, w, 0, 0, w, h); 
bitmap.getPixels(pixs, 0, w, 0, 0, w, h); 

конечный результат pixs заполняется 0.

почему? почему битмап потеряет значение rgb?

ответ

0

наконец я нашел некоторые странные в Android/графиках/Bitmap.cpp, когда растровое изображение premultiplied, он будет использовать FromColor_D32 для заполнения пикселей в растровое изображение, которое будет делать пред- сначала умножение для всех пикселей. так что FromColor_D32_Raw - это то, что я хочу.

static FromColorProc ChooseFromColorProc(const SkBitmap& bitmap) { 
    switch (bitmap.colorType()) { 
     case kN32_SkColorType: 
      return bitmap.alphaType() == kPremul_SkAlphaType ? FromColor_D32 : FromColor_D32_Raw; 
     case kARGB_4444_SkColorType: 
      return bitmap.alphaType() == kPremul_SkAlphaType ? FromColor_D4444 : 
        FromColor_D4444_Raw; 
     case kRGB_565_SkColorType: 
      return FromColor_D565; 
     case kAlpha_8_SkColorType: 
      return FromColor_DA8; 
     default: 
      break; 
    } 
    return NULL; 
} 

Решение добавляет следующее перед вызовом setPixels.

bitmap.setPremultiplied(false); 

, но это также сделает растровое изображение не может быть нарисовано холстом.

0

Поскольку при инициализации растрового изображения, все пиксели инициализируются 0 0 & что-нибудь = 0.

Если вы хотите установить цвет по умолчанию, это ужасно неэффективный способ в любом случае. Установите холст, чтобы привлечь к этой битовой карте и использовать drawColor

+0

извините за мое неполное описание ... –