我正在为 Android 制作一个绘图程序,我想支持的功能之一是能够调整颜色并在绘图中实时查看颜色变化。
为了表示绘图,程序在内部存储了一个 2D int 索引数组(“颜色索引数组”),该数组引用了一个有限的调色板数组。当调整绘图的一部分时,颜色索引数组会随着实际绘制到屏幕上的位图(“屏幕位图”)一起调整。
使用这种方法,当调整颜色时,我必须循环整个颜色索引数组并重新渲染整个位图。我想避免遍历整个数组。
我尝试过的一件事是为调色板中的每种颜色保留一个单独的ALPHA_8位图。每个位图包含 0xff 像素设置为该颜色和 0x00 未设置。当颜色改变时,我使用具有新颜色的 Paint 在屏幕位图顶部绘制正在改变的颜色的 ALPHA_8 位图。
该解决方案有效,并且比天真的循环解决方案更有效,但我遇到的问题是setPixel不适用于 ALPHA_8 位图。它默默地失败了。相反,我需要为每个 ALPHA_8 位图维护一个单独的ByteBuffer,然后使用 copyPixelsFromBuffer来更新实际位图。这是不可取的,因为它将应该是 O(1) 的操作变成了 O(n) 的操作,并使我的 ALPHA_8 位图所需的存储空间增加了一倍。
我觉得我没有看到明显的解决方案。有什么我错过的吗?