使用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去色
阅读全文
1 0
- 使用C语言生成bitmap
- linux c 生成 bitmap
- c语言实现bitmap
- bitmap C语言实现
- 使用C语言操作bitmap(彩色变灰色,黑白)
- 使用单链表随机生成偶数--C语言
- Python使用C语言生成的库
- C语言实现位图(bitmap)
- bitmap应用及C语言实现
- bitmap应用及C语言实现
- 用c语言保存bitmap图像
- C#中使用byte[]数据,生成Bitmap
- C#中使用byte[]数据,生成Bitmap
- C语言生成随机数
- 生成一注双色球-c语言
- C语言生成随机数
- C语言生成菱形
- C 语言生成工程
- 我生成参数而我们是不是填错了哪里啊!怎么搞都没有成功!有大神能帮帮我吗??
- 28个Java常用的工具类之交易前置系统专用工具类
- STM32 采集SHT10传感器数据(非float)
- group by 和 order by
- HashMap实现原理分析
- 使用C语言生成bitmap
- 角点检测方法
- Expecting "jsp:param" standard action with "name" and "value" attributes解决方案
- 关于KMP算法(模块匹配)的实现
- MySQL性能分析及explain的使用
- 0基础UI设计的人如何快速入门
- Search for a Range
- Torch
- duilib将xml和图片合并到exe资源中或者dll中