原位图:
假设采用黑色的背景,白色的字体颜色,绘制一段文字,这时显示效果很好,很平滑。目的位图:
背景色不是黑色的,也不是白色的,假设是一种方便看结果的颜色,然后采用如下的方法拷贝:
遍历原位图的所有像素,只要不是黑色的,由按位置拷贝到目的位图,结束后显示出来看结果。结果:
发现文字边缘有一些偏黑色的点。我认为是文字边缘颜色应该是文字颜色混合了背景色,所以在原图显示效果很好,
但是用上面的方法拷贝过去的,就不好了。问题:
这种情况要如何处理?就是在目的位图上也要有好的显示效果?

解决方案 »

  1.   

    ::SetStretchBltMode(绘制的CDC的hdc,HALFTONE);再看看效果
      

  2.   

    不需要遍历像素点,直接用TransparentBlt就可以拷贝了.最后一个参数为要透明的颜色(比如楼主要的黑色)
    不过,文字边缘有锯齿或者有其他杂色,这点还真不好解决,如果是用PS等做图软件输出文字时选择了"消除锯齿"之类选项的话,是会有出现这个问题,文字边缘的颜色就不"纯"了.
    建议:原位图(单纯只有文字那个图)在做图时直接保存为背景透明的PNG图片,然后用GDIPlus画到目标位图上,这样的显示效果最好.
      

  3.   

    我直接拷贝像素是想看看实现上得到的文字区域,效果和使用TransparentBlt是一样的。主要是我参字体方面的不怎么了解,像这样的要怎样去解决?假设不能用32位的位图
      

  4.   

    你将原图24位色,变成32位,带上alpha[8位],alpha的大小等于原图的灰度值大小,全黑的alpha值为全透,全白则完全不透,按这种透明度叠加,效果一定会到达你的要求。
      

  5.   

    要平滑, 单独的透明色不行的, 5L的方法可以
    或者只有黑白, 可以直接把点的灰度当成 alpha