将一张纯色的BMP上的文字拷贝到另一张BMP时出现的有关问题
将一张纯色的BMP上的文字拷贝到另一张BMP时出现的问题
原位图:
假设采用黑色的背景,白色的字体颜色,绘制一段文字,这时显示效果很好,很平滑。
目的位图:
背景色不是黑色的,也不是白色的,假设是一种方便看结果的颜色,然后采用如下的方法拷贝:
遍历原位图的所有像素,只要不是黑色的,由按位置拷贝到目的位图,结束后显示出来看结果。
结果:
发现文字边缘有一些偏黑色的点。我认为是文字边缘颜色应该是文字颜色混合了背景色,所以在原图显示效果很好,
但是用上面的方法拷贝过去的,就不好了。
问题:
这种情况要如何处理?就是在目的位图上也要有好的显示效果?
------解决方案--------------------
::SetStretchBltMode(绘制的CDC的hdc,HALFTONE);
再看看效果
------解决方案--------------------
不需要遍历像素点,直接用TransparentBlt就可以拷贝了.最后一个参数为要透明的颜色(比如楼主要的黑色)
不过,文字边缘有锯齿或者有其他杂色,这点还真不好解决,如果是用PS等做图软件输出文字时选择了"消除锯齿"之类选项的话,是会有出现这个问题,文字边缘的颜色就不"纯"了.
建议:原位图(单纯只有文字那个图)在做图时直接保存为背景透明的PNG图片,然后用GDIPlus画到目标位图上,这样的显示效果最好.



------解决方案--------------------
你将原图24位色,变成32位,带上alpha[8位],alpha的大小等于原图的灰度值大小,全黑的alpha值为全透,全白则完全不透,按这种透明度叠加,效果一定会到达你的要求。
------解决方案--------------------
要平滑, 单独的透明色不行的, 5L的方法可以
或者只有黑白, 可以直接把点的灰度当成 alpha
------解决方案--------------------
一张纯黑与一张纯白的 按位与 按位或,再加载到内存里,从内存加载到屏幕上
原位图:
假设采用黑色的背景,白色的字体颜色,绘制一段文字,这时显示效果很好,很平滑。
目的位图:
背景色不是黑色的,也不是白色的,假设是一种方便看结果的颜色,然后采用如下的方法拷贝:
遍历原位图的所有像素,只要不是黑色的,由按位置拷贝到目的位图,结束后显示出来看结果。
结果:
发现文字边缘有一些偏黑色的点。我认为是文字边缘颜色应该是文字颜色混合了背景色,所以在原图显示效果很好,
但是用上面的方法拷贝过去的,就不好了。
问题:
这种情况要如何处理?就是在目的位图上也要有好的显示效果?
------解决方案--------------------
::SetStretchBltMode(绘制的CDC的hdc,HALFTONE);
再看看效果
------解决方案--------------------
不需要遍历像素点,直接用TransparentBlt就可以拷贝了.最后一个参数为要透明的颜色(比如楼主要的黑色)
不过,文字边缘有锯齿或者有其他杂色,这点还真不好解决,如果是用PS等做图软件输出文字时选择了"消除锯齿"之类选项的话,是会有出现这个问题,文字边缘的颜色就不"纯"了.
建议:原位图(单纯只有文字那个图)在做图时直接保存为背景透明的PNG图片,然后用GDIPlus画到目标位图上,这样的显示效果最好.
------解决方案--------------------
你将原图24位色,变成32位,带上alpha[8位],alpha的大小等于原图的灰度值大小,全黑的alpha值为全透,全白则完全不透,按这种透明度叠加,效果一定会到达你的要求。
------解决方案--------------------
要平滑, 单独的透明色不行的, 5L的方法可以
或者只有黑白, 可以直接把点的灰度当成 alpha
------解决方案--------------------
一张纯黑与一张纯白的 按位与 按位或,再加载到内存里,从内存加载到屏幕上