在使用的过程中,遇到了这样的一个情况。维护很久前的一个项目的时候,想把之前的程序作成DLL。里面有一部分是描画一张8位DIB图片的,用的是纯C写的一段代码。可是在使用的时候发现,GDI+中由于使用了Alpha,所以老代码里面的调色板需要进行一些处理。
ColorPalette类,这个是GDI+中的调色板类。在对调色板进行调整的时候,我们是一定要使用它的。在C#中,ColorPalette 是没有构造函数的。想要得到一个调色板对象,我们可以这样做:
ColorPalette Palette = bmp.GetPalette(Palette, 256); //bmp是一个普通的Bitmap对象。
这样我们就得到了一个调色板了。同样,经过处理后,我们只要在描画(DrawImage)之前,把调色板对象赋值回去就可以了:bmp.SetPalette(Palette);








上面这段代码就是在老的图片处理算法中,增加透明度的代码。
另外,我们也可以自己建立一个调色板,例如:
ColorPalette
*
Palette
=
(ColorPalette
*
)
new
unsigned
char
[
sizeof
(ColorPalette)
+
255
*
sizeof
(ARGB)];
在网上看到很多使用ImageAttributes.GetAdjustedPalette来进行调色板操作的。个人做了尝试之后,发现不用那么麻烦,不然还需要实例化一个ImageAttributes对象,然后在描画的时候还需要更多参数的那个DrawImage方法来使用ImageAttributes。其实只要简单的直接修改就好了。