有人想要24位图象转化为256色图象的Code,我贴这里了.(100分)

  • 主题发起人 主题发起人 lha
  • 开始时间 开始时间
to YB_unique :
唉,看来也只好自己看E文Help了,你上面贴的我都看过。
 
TO LHA:
呵呵!叹什么气?说出来听听!又是一个失意人???
DFW都快变成个人宣泄的场所了,我都不大想来了!
 
to YB_unique:
你去看看这个 :http://www.delphibbs.com/delphibbs/dispq.asp?lid=713541
 
心病还需心药医,解铃还需系铃人。
你是聪明的,应该会懂!
 
YB_unique:
function DitherPixel(ABmp.Canvas.Pixels(Row, Col) : TColor) : TColor;
是什么语法呀
 
下面是一个效率更高的算法:
1建立一个32768个元素的一个数组a[],有的15位颜色序号,元素初始值全为0
2取每一个点的颜色的高5位,按BGR的顺序组成一个15位的整数,假定是b,则a:=a+1,
3判断所有点在红、蓝、绿分量上的最大距离,即颜色分量的差的最大值,假定红色距离最大
4将所有颜色按红分量排序,循环从最小的红分量开始,求点的数量和,如果刚超过点数量的一半中止循环,这样就把所有的点分成了两半
5分别对两半求三个颜色分量上的最大距离,按最大距离的颜色分量排序,再循环求刚将各自点分成两半的颜色分量值
6重复进行,直到把所有的点分成256个部分为止,求每个部分的加权平均
7对所有的点的颜色值按所处部分的序号代替
整个算法的思想就是将包含所有点的外接长方体(三条棱就是三种颜色)按最大棱在中点分割
然后对分割后的两个长方体按上述思想重复进行
算法大量的是加法,速度很快,效果也很好,相对用4096种颜色包含的信息更多
 
这么麻烦吗?
var
b1,b2:TbitMap;
Begin
b1:=TBitMap.create;
b2:=TbitMap.create;
b1.loadformfile('c:/1.bmp');
b2.width:=b1.width;
b2.height:=b1.height;
b2.PixelFormat:=pf8bit;
b2.canvas.draw(0,0,b1);
b2.savetofile('c:/2.bmp');//这就是转换后的图片了

End;
 
后退
顶部