您当前的位置: 首页 >  c语言

DS小龙哥

暂无认证

  • 3浏览

    0关注

    679博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C语言编程: 在BMP图片上添加图片水印

DS小龙哥 发布时间:2020-08-12 14:57:48 ,浏览量:3

一、运行环境介绍

Linux系统: Redhat6.3 (32位)

gcc 版本 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)

二、功能介绍

创建一张BMP图片,将图片当做画板,在图片的指定位置绘制图片(要当做水印的图片)。

三、核心代码

可以传入任意尺寸的图片进行生成绘制。

#include 
#include 
#include 

#pragma pack(1) //强制1个字节对齐
//BMP的文件头
struct _BMP_HEAD
{
    char type[2]; //图片的类型 "BM"
    unsigned int size; //文件大小
    unsigned short  r1; //保留1
    unsigned short  r2; //保留2
    unsigned int seek; //数据偏移字节(真实像素点数据)
};

//BMP的参数信息
struct _BMP_INFO
{
    unsigned int size; //当前结构体大小
    unsigned int w; //宽度
    unsigned int h; //高度
    unsigned short flag; //固定为1
    unsigned short bit; //像素点的位数
    unsigned int r1; //压缩方式  0
    unsigned int r2; //水平分辨率
    unsigned int r3; //垂直分辨率
    unsigned int r4; //垂直分辨率
    unsigned int r5; //引用色彩
    unsigned int r6; //关键色彩
};

//外部引用声明
extern const unsigned char gImage_1[4800];

/*
函数功能: 显示像素点
*/
void Display_Point(char *head,int w,int x,int y,int c)
{
    unsigned char *p=(unsigned char *)(head+w*3*y+x*3);
    *(p+0)=(c>>0)&0xFF;
    *(p+1)=(c>>8)&0xFF;
    *(p+2)=(c>>16)&0xFF;
}

/*
函数功能: 绘制一张图片水印
函数参数:
char *image_data 取模数据的首地址  (横向取模--高位在前)
int w  取模字体的宽度
int h  取模字体的高度
*/
void Display_Image(char *image_data,int w,int h,char *image_head,int image_w,int x,int y)
{
    int i,j;
    int x0=x;
	int c;
    for(i=0;i            
关注
打赏
1664009229
查看更多评论
0.0941s