【问题标题】:Pebble Time Basalt Image Merge Pixel卵石时间玄武岩图像合并像素
【发布时间】:2015-06-08 14:25:53
【问题描述】:

我想知道您是否可以帮助我完成对 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));
  }

【问题讨论】:

  • 这是我的 cloud pebble 项目的副本,有点乱,所以我很抱歉。我一直试图让它工作尝试不同的代码,但没有运气。 github.com/pebbleben/daynight_basalt

标签: pebble-sdk cloudpebble


【解决方案1】:

在构建时,Pebble SDK 会尝试为您在 appinfo.json 中提供的每个输入图像生成尽可能小的 GBitmap,以在运行时节省宝贵的 RAM。即使在 Basalt 上运行,这也可能意味着您最终每个像素的位数更少(例如GBitmapFormat4BitPalette),其中background_data 上的每个字节都可以表示多个像素,因此像素不一定从字节边界开始。您可以使用gbitmap_get_format() 来验证这一点。

如果这是您的问题的原因,最简单的方法(以消耗更多 RAM 为代价)是通过在您的 appinfo.json 中指定 pbi8 来强制将 GBitmapFormat8Bit 作为您的 GBitmap 格式,例如

"media": [
  {
    "type": "PBI8",
    "name": "NIGHT_PBL",
    "file": "night_globe.png"  
  }
]

这将在玄武岩上产生GBitmapFormat8Bit 输出,在 Aplite 上产生GBitmapFormat1Bit(如前所述)。请注意,您仍然可以使用"Platform-specific Resources" on the 3.0 migration guide 中所述的后缀~bw~color 来选择不同的输入文件。

此外,请尽量避免在代码中使用硬编码数字。在fb_databackground_data 上使用gbitmap_get_bounds().size.w 而不是144

【讨论】:

  • 谢谢@Heiko!我在 cloudpebble 上运行它,我不确定是否可以在那里编辑媒体类型。然而,在从卵石论坛上的两个人那里得到建议后,这似乎确实是问题所在,并且不是通过 appinfo.json 解决了,而是通过上传一张新的夜间照片,在 72'd 行下方添加了所有 64 种颜色。这迫使 SDK 将图像视为 PBI8。我在 github.com/pebbleben/daynight_basalt forums.getpebble.com/discussion/23837/basalt-merge-two-images-pixel-by-pixel-for-day-night-watchface 成功更新了当前草稿
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多