使用C语言生成bitmap
2017-12-21 14:19
120 查看
bitmap基本知识连接,不多说
https://www.cnblogs.com/ZXNblog/p/4046342.html
这篇讲述怎么用C语言生成bitmap
1. 包含头文件
2. 在主函数定义两个信息文件结构体并赋初值
3. 定义绘画函数,并在函数内确定图像的具体信息(drawColor函数是生成所有的颜色图像,drawSin是绘制sin函数图像)
4. 主函数调用两个函数
5. 效果图
连接: 使用C语言将24位彩色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.1415926 typedef 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去色
相关文章推荐
- C语言使用matlab生成的滤波器头文件
- [wxWidgets]_[中级]_[使用wxRendererNative画的原生图片生成带alpha透明区域的wxBitmap]
- [置顶] [wxWidgets]_[使用wxRendererNative画的原生图片生成带alpha透明区域的wxBitmap]
- windows中使用C# 调用 C语言生成的dll
- 使用RoundedBitmapDrawable生成圆角图片的方法
- 使用hiero.jnlp生成BitmapFont
- 使用Bitmap生成透明底图,并保存到本地SD卡中
- 使用java调用C语言的方法,让java获取串口数据并生成一个String对象的代码。
- Windows Phone 使用 WriteableBitmap后台生成图片
- 通过 Bitmap Font Generator 生成 fnt 与 png 文件供 cocos2d-x 中 LabelBMFont 使用达到以图片表现数字
- 通过 Bitmap Font Generator 生成 fnt 与 png 文件供 cocos2d-x 中 LabelBMFont 使用达到以图片表现数字
- Linux Unicode 编程--C语言如何使用/生成UTF-8编码格式的文件
- [Tools]位图字体生成工具Bitmap Font Generator的使用
- 使用c语言生成随机数的示例分享
- 巩固C语言(九)----静态库文件的生成和使用、劫持技术
- 生成黑白画笔,android使用系统浏览器打开网页,将Bitmap图片存储在本地JPG文件的方法
- 通过 Bitmap Font Generator 生成 fnt 与 png 文件供 cocos2d-x 中 LabelBMFont 使用达到以图片表现数字
- 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写
- [Material Design]使用RoundedBitmapDrawable快速生成圆角和圆形图片
- 通过 Bitmap Font Generator 生成 fnt 与 png 文件供 cocos2d-x 中 LabelBMFont 使用达到以图片表现数字