0

我正在使用Pebble 示例使用 APNG 并尝试用透明文本对其进行遮罩,因此位图将仅显示文本,但无论我尝试何种遮罩/复合模式,位图都显示为黑白(原始动画是如果我不绘制文本,则以彩色显示)

在此处输入图像描述

这是我在回调 SP 中用于绘制文本的图层的示例代码:

//creating background and text
graphics_context_set_fill_color(ctx, GColorBlack);
graphics_fill_rect(ctx, GRect(0, 0, 144, 168), 0, GCornerNone);
graphics_context_set_text_color(ctx, GColorWhite);
graphics_draw_text(ctx, "08:39", fonts_get_system_font(FONT_KEY_ROBOTO_BOLD_SUBSET_49), GRect(0,50,144,118), GTextOverflowModeFill, GTextAlignmentCenter, NULL);

//drawing bitmap (extracted from bitmap_sequence elsewhere) 
graphics_context_set_compositing_mode(ctx, GCompOpClear);
graphics_draw_bitmap_in_rect(ctx, s_bitmap, GRect(0,0,144,168));

知道如何让实际的颜色位图显示出来吗?

4

1 回答 1

1

好的,我终于成功了,但不确定这是否是最好的方法。我基本上捕获当前层的帧缓冲区,然后遍历每个像素,逐字节复制源位图,但仅在遇到白色像素时:

在此处输入图像描述

GBitmap *fb = graphics_capture_frame_buffer_format(ctx, GBitmapFormat8Bit);

uint8_t *fb_data =  gbitmap_get_data(fb);
uint8_t *anim_data =  gbitmap_get_data(s_bitmap);

for (int i=0; i < 144*168; i++) {
    if (fb_data[i] == 255) {
       fb_data[i] = anim_data[i];
    }
}

也可以优化

于 2015-03-20T18:45:49.793 回答