C语言版GDI+应用例子 -- 制作水印图片

来源:互联网 发布:域名别名 编辑:程序博客网 时间:2024/05/22 06:51

    本文介绍一个利用C语言版GDI+制作水印图片的例子,下面是程序代码:

    本例子制作水印图片的步骤:

    1、打开原始图片和原始水印图片;

    2、建立一个新的图像,即要制作的水印图片,其大小等同于原始图片;

    3、画原始图片到新图像;

    4、利用图像显示属性对象设置原始水印图片关键颜色,将其四个角的绿色像素置为透明色,这样显示的图像为圆角形状;

    5、利用图像显示属性对象设置原始水印图片颜色矩阵,使其按30%的不透明度显示;

    6、根据设置好的图像显示属性对象显示原始水印图片到新图像左上角;

    7、设置文本显示格式对象为文本居中显示;

    8、以版权文本显示中心坐标偏右下1像素,用0x99000000颜色在新图像显示版权文本阴影,颜色中的0x99为文本阴影颜色不透明度;

    9、以版权文本显示中心坐标,用0x99ffffff颜色在新图像显示版权文本,颜色中的0x99为文本颜色不透明度;

    10、制作完毕。

    本例子综合运用了GDI+常用的图像操作过程和文本显示过程,包括图像显示属性对象和文本显示格式对象的运用。

    原C++ GDI+版本的Graphics.DrawString函数有个以x,y坐标为参数的重载方法,C版本将它删去了,只保留了以布局矩形为参数的方法,例子中的代码fRect = MakeRectF(phWidth / 2 , phHeight - 26, 0, 0);是建立布局矩形,其中的x,y参数为文本显示的中心点,而非文本显示的左上角坐标,这是因为例子中文本格式设置为居中显示(StrFormatSetAlignment(format, StringAlignmentCenter);),所以文本显示起始坐标点必须为文本中心点;而Width和Height参数分别设置为0,意思是不限制文本显示的右边和下边的边界,相当于原C++版本以x,y坐标为参数的重载方法,当文本长度超出时会截断,反之,如果给出具体的Width和Height,当文本长度超出时会换行。

    例子中也演示了如何保存图像,并给出了设置保存图像质量编码参数的代码(仅对jpeg格式图像有效)。保存图像时用到的GetEncoderClsid函数是原GDI+中没有的,为方便编写保存图像代码,我将该函数写在了GDI+头文件GdipImageCode_c.h中。如果没有设置保存图像编码参数,ImageSavexxxx系列函数中的encoderParams参数设置为NULL即可,但其中的clsidEncoder参数是必须的。

    例子代码使用的窗口框架代码和GDI+ C语言版本下载地址见《在C语言Windows应用程序中使用GDI+》。

    下面是例子运行界面图,其中左上为原始图片,左下为原始水印图片,右边是制作好的带版权印记的水印图片:

界面效果

    指导和建议请来信:mao.maozefa@gmail.commaozefa@hotmail.com