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。其实只要简单的直接修改就好了。

 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值