使用C语言生成bitmap

来源:互联网 发布:config.inc.php下载 编辑:程序博客网 时间:2024/05/05 11:25

bitmap基本知识连接,不多说
https://www.cnblogs.com/ZXNblog/p/4046342.html
这篇讲述怎么用C语言生成bitmap
1. 包含头文件

include <stdio.h>include <windows.h>include <stdlib.h>include <math.h>define PI 3.1415926typedef unsigned char uc;

2. 在主函数定义两个信息文件结构体并赋初值

int main(){    BITMAPFILEHEADER fileHeader;    BITMAPINFOHEADER infoHeader;    fileHeader.bfType=0x4D42;//类型,代表bitmap    fileHeader.bfReserved1=0;//保留字1(初值)     fileHeader.bfReserved2=0;//保留字2(初值)     fileHeader.bfOffBits=sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER);//偏移量    /* fileHeader.bfSize没有赋值 */    infoHeader.biBitCount=24;//24位位图    infoHeader.biClrImportant=0;//重要颜色,0代表都重要(初值)     infoHeader.biClrUsed=0;//使用过的颜色(初值)     infoHeader.biCompression=0;//没有被压缩     infoHeader.biPlanes=1;//平面数(初值)     infoHeader.biXPelsPerMeter=0;//x方向分辨率(初值)     infoHeader.biYPelsPerMeter=0;//y方向分辨率(初值)     }

3. 定义绘画函数,并在函数内确定图像的具体信息(drawColor函数是生成所有的颜色图像,drawSin是绘制sin函数图像)

void drawColor(BITMAPFILEHEADER *fileHeader,BITMAPINFOHEADER *infoHeader){    // RGB组合共有 256*256*256种 组合    int r,g,b;    int width=256*16;    int height=256*16;    int stride=((24*width)>>5)<<2;//取4的整数倍数    fileHeader->bfSize=fileHeader->bfOffBits+height*stride;//文件大小    infoHeader->biHeight=height;    infoHeader->biWidth=width;    infoHeader->biSizeImage=stride*height;//图像大小    infoHeader->biSize=sizeof(BITMAPINFOHEADER);//结构体大小    /*下面开始写位图 */    FILE* fp=fopen("color.bmp","wb");    fwrite(fileHeader,sizeof(BITMAPFILEHEADER),1,fp);//写文件头     fwrite(infoHeader,sizeof(BITMAPINFOHEADER),1,fp);//写信息头     uc *array=(uc*)malloc(stride); //分配空间    for(int i=0;i<height;i++){        for(int j=0;j<width;j++){            r=(i+1)*j/256/256;            g=i/16;            b=255-i*j%256;              array[3*j]=(uc)r;            array[3*j+1]=(uc)g;            array[3*j+2]=(uc)b;        }        fwrite(array,1,stride,fp);    }     fclose(fp);    free(array);    array=NULL;    }void drawSin(BITMAPFILEHEADER *fileHeader,BITMAPINFOHEADER *infoHeader){    int r,g,b;    int width=1000;    int height=1000;    int stride=((24*width)>>5)<<2;//取4的整数倍数    fileHeader->bfSize=fileHeader->bfOffBits+height*stride;//文件大小    infoHeader->biHeight=height;    infoHeader->biWidth=width;    infoHeader->biSizeImage=stride*height;//图像大小    infoHeader->biSize=sizeof(BITMAPINFOHEADER);//结构体大小    /*下面开始写位图 */    FILE* fp=fopen("sin.bmp","wb");    fwrite(fileHeader,sizeof(BITMAPFILEHEADER),1,fp);//写文件头     fwrite(infoHeader,sizeof(BITMAPINFOHEADER),1,fp);//写信息头     uc *array=(uc*)malloc(stride); //分配空间    for(int i=0;i<height;i++){        for(int j=0;j<width;j++){            array[3*j]=(uc)255;//底图变白             array[3*j+1]=(uc)255;            array[3*j+2]=(uc)255;            if(i==500+int(400*sin(0.8*j*PI/180))){                array[3*j+1]=array[3*j]=0;                array[3*j+2]=(uc)255;                printf("%d %d\n",i,j);            }        }        fwrite(array,1,stride,fp);    }     fclose(fp);    free(array);    array=NULL;    }

4. 主函数调用两个函数

drawColor(&fileHeader,&infoHeader);drawSin(&fileHeader,&infoHeader);

5. 效果图
这里写图片描述
这里写图片描述

连接: 使用C语言将24位彩色bitmap去色

原创粉丝点击