我想知道你是否可以帮我完成对dayworld地图表盘的更新。我正在使用David Gianforte的applite代码并更新玄武岩。我的目标是显示白天图像以及何时显示夜间图像。 David的代码已遍历图片中的每个像素,将夜间像素设置为黑色。我非常接近,但我得到的是一张乱码而不是晚上。这是我的代码,有什么想法吗?
//put frame buffer here
//taken from http://codecorner.galanter.net/2015/03/20/pebble-time-draw-transparent-text-over-color-bitmap-background/
GBitmap *fb = graphics_capture_frame_buffer_format(ctx, GBitmapFormat8Bit);
uint8_t *fb_data = gbitmap_get_data(fb);
uint8_t *background_data = gbitmap_get_data(gbitmap_create_with_resource(RESOURCE_ID_NIGHT_PBL));
#define WINDOW_WIDTH 144
uint8_t (*fb_matrix)[WINDOW_WIDTH] = (uint8_t (*)[WINDOW_WIDTH]) fb_data;
uint8_t (*background_matrix)[WINDOW_WIDTH] = (uint8_t (*)[WINDOW_WIDTH]) background_data;
loop through x/y cordinates and if night{
fb_matrix[y][x] = background_matrix[y][x]; //This seems to be error
}
背景是完美的,曲线在正确的位置,但它不能准确反映夜间图像,但看起来像随机静态。图像是144x72。
对于它的价值,这里是if语句为真时黑白图像翻转颜色的原始代码......
if ((angle < 0) ^ (0x1 & (((char *)world_bitmap->addr)[byte] >> (x % 8)))) {
// white pixel
((char *)image.addr)[byte] = ((char *)image.addr)[byte] | (0x1 << (x % 8));
} else {
// black pixel
((char *)image.addr)[byte] = ((char *)image.addr)[byte] & ~(0x1 << (x % 8));
}
答案 0 :(得分:0)
在构建时,Pebble SDK尝试为您在GBitmap
中提供的每个输入图像生成尽可能小的appinfo.json
,以便在运行时节省宝贵的RAM。即使在玄武岩上运行,也可能意味着每个像素的位数最少(例如GBitmapFormat4BitPalette
),background_data
上的每个字节可能代表多个像素,因此像素不一定从字节边界开始。您可以使用gbitmap_get_format()
来验证这一点。
如果这是您遇到问题的原因,那么最简单的方法(以更多RAM消耗为代价)将通过指定GBitmapFormat8Bit
强制GBitmap
作为pbi8
格式在appinfo.json
中,例如
"media": [
{
"type": "PBI8",
"name": "NIGHT_PBL",
"file": "night_globe.png"
}
]
这将在Aplite上生成玄武岩上的GBitmapFormat8Bit
输出和GBitmapFormat1Bit
(如前所述)。请注意,您仍然可以使用"Platform-specific Resources" on the 3.0 migration guide中所述的后缀~bw
和~color
来选择不同的输入文件。
另外,请尽量避免代码中使用硬编码的数字。 144
和gbitmap_get_bounds().size.w
上使用fb_data
代替background_data
。