首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择GIF透明颜色的算法

选择GIF透明颜色的算法
EN

Stack Overflow用户
提问于 2014-08-26 20:44:23
回答 3查看 83关注 0票数 1

我有一堆颜色(最多255种)(总共256^3种可能的值),为了压缩目的,我想想出另一种颜色,这不是其中之一。

例如,我有一个如此小的颜色表:[0,0,0][1,42,69] --剩下的256^3-2颜色中的任何一种都可以--不管是[0,0,7]还是[6,6,6]

有人能为我提供一个简单有效的算法来找到另一种颜色吗?

UPD:不好的想法也是受欢迎的。

EN

回答 3

Stack Overflow用户

发布于 2014-08-26 20:58:17

  1. 制作一个所有已知颜色的散列表,并将您的颜色放入其中。
  2. 创建一个采用颜色的算法,并通过递增最低字节来生成它的“后继”,并在有进位时继续递增为高阶字节。
  3. [0,0,0]开始,根据步骤1中的哈希表检查它。
  4. 循环直到你找到第一个间隙。

该算法在颜色个数上是线性的。

票数 2
EN

Stack Overflow用户

发布于 2014-08-26 21:38:48

既然我们现在有两个答案,我想贴我自己的。

我们不希望现有颜色表中的任何颜色变得透明。这就是为什么我说过,这个颜色表可以是最大的255颜色长度。

因此,至少会有一个红色(或绿色或蓝色)通道值未使用。因此,我们不必使用256^3大的标志表-- 256 (用于内存的比特或用于速度的字节)就足够了。

票数 2
EN

Stack Overflow用户

发布于 2014-08-26 21:12:59

遍历您的图像,计算256个可能的像素值中每一个发生的次数。使用std::min_element (一种可能性)找到最小的计数,并使用该颜色号。如果你说的是256个可能的颜色值,那就差不多了。

如果你真的每像素有24位,那么你可能想要用稀疏的表示来表示计数,因为(对于任何合理大小的图片)它们中的很多都不可避免地为零(你需要大约1600万像素的图片,甚至理论上使用所有可能的颜色)。OTOH,在现代计算机上,即使使用数十兆字节(大约)来表示一个密集的计数可能是值得的--它可能会使您的处理更快(没有需要计算的哈希代码),而且内存使用量仍然很少,因此减少处理时间是值得的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25514833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档