真彩色转256色算法

news/2024/11/8 14:36:56/

位图常用的一种压缩方法。从位图图片中选择最有代表性的若干种颜色(通常不超过256种)编制成颜色表,然后将图片中原有颜色用颜色表的索引来表示。
这样原图片可以被大幅度有损压缩。适合于压缩网页图形等颜色数较少的图形,不适合压缩照片等色彩丰富的图形。

在项目中,由于底层驱动改变,原先用于真彩色的buffer改成只能传递256色索引值的buffer。所以,需要压缩真彩色bitmap为256色。
大致的算法如下:
A R G B 各8位。

  • 第一次近似替换。我们取像素 RGB的高4位,组成一个12位数,也就是说总共有2的12次方种颜色。采用排序统计,计算bitmap位图的出现的频率,算出频率高的256种颜色。
  • 第二次近似替换。然后把其余的4096-256种颜色,用平方差或者其他算法,第256之后的颜色在前256种颜色中找一个最接近的颜色做近似替换。也就是说现在4096-256种颜色和频率较高的256色形成一一对应关系,现在我们把bitmap 24位真彩色转变成256色。
  • 第三次近似替换。把频率高的每种颜色在调色板中找到最接近的颜色的索引值,然后把256色索引值传给底层驱动。

经过这几次近似替换,结果相当于,bitmap每个像素会找到256色调色板中最接近的颜色的索引值。

ps:当时离职的时候,公司不允许保留源代码,甚至文档也不允许拷贝出来!经过了快两年的时间,具体实现也忘得差不多了,现在只能回想大概思路,有时间再用C语言实现。


http://www.ppmy.cn/news/556356.html

相关文章

计算机颜色格式(真彩、256色等)

原文链接:https://www.cnblogs.com/jackStudy/archive/2012/06/26/2563261.html 常见的颜色有 8位 16位 24位 32位色,其中24位及以上称为真彩,是PC上最常用的颜色,其他基本用于嵌入式系统或一些工控领域,详情可查阅一…

RGB转8色16色256色

RGB色的图片有255*255*25516581375种颜色,如果再加上透明度ARGB就要再乘以255,这么多的颜色在图形处理中有时不需要使用那么多的颜色,只需要转化成8色、16色或者256色就可以了,而透明度则作特殊处理,比如在阀值80以下的…

matlab 256灰度图像,MATLAB实现256色灰度图像的Arnold置乱

MATLAB实现256色灰度图像的Arnold置乱 下面的程序实现256色灰度图像的Arnold置乱。以前用VC做很麻烦,但在matlab中却显得非常简洁。matlab不愧是一款很受欢迎的辅助研究工具。 ------&#xff0…

用C++实现RGB转256色

前言 RGB图片转256色,我知道的有两种方法: ①用Windows系统自带的画图工具打开图片,再另存为256色bmp图片 ②用Photoshop打开图片,然后图像→模式→索引颜色,选择局部(可感知)→确定→存储为…

256色图像不一定是灰度图像。

256色图像属于伪彩色图像,但是他也是8位的呀,他和256灰度图有什么差别?256色图像是如何表示颜色的? 灰度图像:每个像素由一个字节,即是八位,共256种色,且红绿蓝三原色分量相等。&…

32位色彩的真实含义 -- 24位色彩, 8位透明度

http://itbbs.pconline.com.cn/diy/9142730.html ----------------------------------------------------------------- 32位色彩的真实含义 -- 24位色彩, 8位透明度 32位色比24位色的色彩没有区别, 多出来的8位是用来体现半透明的程度的, GUI系统称之为Alpha Blending的.如…

诊断测试工具CANoe.DiVa从入门到精通系列——开门见山

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此伪装成客观意见,但无一例外的是,他们想…

Nginx 的学习与实战【一】

Nginx 的学习与实战【一】 一、Nginx 简介 1.、概述 Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx是开源、高性能…