C++/GDI+ 学习笔记(四)——实用技巧——调色板(ColorPalette)

在使用的过程中,遇到了这样的一个情况。维护很久前的一个项目的时候,想把之前的程序作成DLL。里面有一部分是描画一张8DIB图片的,用的是纯C写的一段代码。可是在使用的时候发现,GDI+中由于使用了Alpha,所以老代码里面的调色板需要进行一些处理。

ColorPalette类,这个是GDI+中的调色板类。在对调色板进行调整的时候,我们是一定要使用它的。在C#中,ColorPalette 是没有构造函数的。想要得到一个调色板对象,我们可以这样做:

ColorPalette Palette = bmp.GetPalette(Palette, 256); //bmp是一个普通的Bitmap对象。

这样我们就得到了一个调色板了。同样,经过处理后,我们只要在描画(DrawImage)之前,把调色板对象赋值回去就可以了:bmp.SetPalette(Palette);

for  ( int  i  =   0 ; i  <   256 ; i ++ )
{
          
uint RGB = …  //获取一个颜色信息
          RGB = RGB | 0xFF000000;
          Color ColorTemp 
= Color.FromArgb((int)RGB);      

          Palette.Entries[i] 
= ColorTemp;
}

上面这段代码就是在老的图片处理算法中,增加透明度的代码。

另外,我们也可以自己建立一个调色板,例如:

ColorPalette  * Palette  =  (ColorPalette * ) new  unsigned  char [ sizeof (ColorPalette) + 255   *   sizeof (ARGB)]; 
       这样就能建立起来一个8位色(256色)的调色板。

在网上看到很多使用ImageAttributes.GetAdjustedPalette来进行调色板操作的。个人做了尝试之后,发现不用那么麻烦,不然还需要实例化一个ImageAttributes对象,然后在描画的时候还需要更多参数的那个DrawImage方法来使用ImageAttributes。其实只要简单的直接修改就好了。

 

你可能感兴趣的:(C++,c,算法,C#,dll,GDI+)