static uint16_t get_argb4444_neighbor_avg_color(const SkBitmap& bitmap, int xOrig, int yOrig) { uint8_t count = 0; uint8_t r = 0; uint8_t g = 0; uint8_t b = 0; for (int y = yOrig - 1; y <= yOrig + 1; y++) { if (y < 0 || y >= bitmap.height()) { continue; } uint16_t* src = bitmap.getAddr16(0, y); for (int x = xOrig - 1; x <= xOrig + 1; x++) { if (x < 0 || x >= bitmap.width()) { continue; } if ((SkGetPackedA4444(src[x]) & 0x0F) != SK_AlphaTRANSPARENT) { uint16_t color = remove_alpha_argb4444(src[x]); r += SkGetPackedR4444(color); g += SkGetPackedG4444(color); b += SkGetPackedB4444(color); count++; } } } if (count == 0) { return SkPackARGB4444(SK_AlphaOPAQUE & 0x0F, 0, 0, 0); } else { return SkPackARGB4444(SK_AlphaOPAQUE & 0x0F, r / count, g / count, b / count); } }
static SkBitmap make_argb4444_gradient() { SkBitmap bitmap; init_bitmap(kARGB_4444_SkColorType, &bitmap); uint8_t rowColor = 0; for (int y = 0; y < SLIDE_SIZE; y++) { uint16_t* dst = bitmap.getAddr16(0, y); for (int x = 0; x < SLIDE_SIZE; x++) { dst[x] = SkPackARGB4444(rowColor, rowColor, rowColor, rowColor); } if (y % PIXEL_SIZE_4444 == PIXEL_SIZE_4444 - 1) { rowColor++; } } return bitmap; }
static SkBitmap make_argb4444_stripes() { SkBitmap bitmap; init_bitmap(kARGB_4444_SkColorType, &bitmap); uint8_t rowColor = 0;; for (int y = 0; y < SLIDE_SIZE; y++) { uint16_t* dst = bitmap.getAddr16(0, y); for (int x = 0; x < SLIDE_SIZE; x++) { dst[x] = SkPackARGB4444(rowColor, rowColor, rowColor, rowColor); } if (rowColor == 0) { rowColor = 15; } else { rowColor = 0; } } return bitmap; }