Pebble Cloud SDK:如何强制使用 8 位图像而不是调色板?

Pebble Cloud SDK: How to force 8 bit images and not color palette?

我有一个已成功上传到 Pebble Cloud SDK 的 .png 文件。如果我将 "memory format" 标记为 "best",一切正常,但当我查看像素(尝试以编程方式更改它们)时,它们使用 4 位调色板。我不想使用这个。

我返回我的资源,从下拉菜单中选择“8 位”,但现在出现编译错误:

"can't use more than two bits on a black-and-whiteplatform.". 

所以,我没有将 "aplite" 作为一个平台,我认为它是黑白版本。这让我得到了新的编译错误:

" error: 'RESOURCE_ID_SPIRO_BLACK_RED' undeclared (first use in this function)"

我假设它没有为 "aplite" 声明,但我 运行 的模拟器是 "chalk",所以我不确定它为什么会关心。

谁能解释一下使用“8 位”内存格式的正确方法?或者,更重要的是,完全避免使用调色板?

我的长期 objective 是获取简单图像中的每个非黑色像素并将其更改为某种随机颜色。如果我使用调色板,显然这不是一个选项,除非我在原始图像中包含所有需要的颜色。 (即便如此,目前调色板还是伤了我的脑袋。)

编辑: 作为测试,我用 Pebble 支持的所有 64 种颜色制作了我的图像版本。令我惊讶的是,图像格式变成了 8 位(回想起来,调色板只能支持 16 种不同的颜色,所以这是有道理的)。我仍然想知道如何手动执行此操作。

我建议使用优秀的库 GBitmap-Colour-Palette-Manipulator。它有许多有用的功能,但您可能最感兴趣的功能是(来自README.md):

void replace_gbitmap_color(GColor color_to_replace, GColor replace_with_color, GBitmap *im, BitmapLayer *bml);

This is function allows you to pass in a gbitmap, the color you want to replace and the target color. You also pass your BitmapLayer to this function so that it can automatically be marked dirty. This is an all in one function; it replaces the specified color and automatically updates the BitmapLayer. Pass NULL to *bml if you do not want to update a BitmapLayer (useful for gbitmaps on your action bar).

库让您可以专注于项目代码并处理底层细节。我已经在我的 "Big Flip Clock" 表盘中成功使用了它,它最初是 Aplite/bw,但使用这个库很容易转换为 PT/Color。