C++基于Windows GDI自己绘制BMP图像

无意中看到这个帖子:http://news.cnblogs.com/n/501488/

仿照大神代码研究了一下,自己按照位图格式填充到数据区生成的图片。可能位图信息填充不完善会有缺失,不过确实可以用照片查看器或者绘图打开查看。

#include 
#include 
#include 
#include 
#include 
#define DIM 1024 
#define DM1 (DIM-1) 
#define _sq(x)  ((x)*(x)) // square  //平方
#define _cb(x)  abs ((x)*(x)*(x))  // absolute value of cube  //立方绝对值
#define _cr(x)  (unsigned char)(pow ((x),1.0/3.0)) // cube root	立方根


unsigned char RD (int,int);
unsigned char GR (int,int);
unsigned char BL (int,int);


unsigned char RD (int i,int j)
{
//	return (char)(_sq(cos(atan2((double)j-512,(double)i-512)/2))*255);

	float s=3./(j+99);
	float y=(j+sin ((i*i+_sq (j-700)*5)/100./DIM)*35)*s;
	return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;
}
unsigned char GR (int i,int j)
{
//	return (char)(_sq(cos(atan2((double)j-512,i-512)/2-2*acos((double)-1)/3))*255);
	float s=3./(j+99);
	float y=(j+sin ((i*i+_sq (j-700)*5)/100./DIM)*35)*s;
	return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;

}
unsigned char BL (int i,int j)
{
//	return (char)(_sq(cos(atan2((double)j-512,i-512)/2+2*acos((double)-1)/3))*255);
	float s=3./(j+99);
	float y=(j+sin ((i*i+_sq (j-700)*5)/100./DIM)*35)*s;
	return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;
}

void Pixel_write(int,int);
FILE *fp;
int main()
{
	fp = fopen ("MathPic.bmp","wb");
	BITMAP bmp; 
    BITMAPINFOHEADER bih;		//位图信息头 
    memset(&bih, 0, sizeof(bih));  
    bih.biBitCount = 24;  
    bih.biCompression = BI_RGB;//表示不压缩  
    bih.biHeight = 1024;  
    bih.biPlanes = 1;		//位平面数,必须为1  
    bih.biSize = sizeof(BITMAPINFOHEADER);  
    bih.biSizeImage =1024*1024;  
    bih.biWidth = 1024; 

    BITMAPFILEHEADER bfh;		//位图文件头 
    memset(&bfh, 0, sizeof(bfh));  
    bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);  
    bfh.bfSize = bfh.bfOffBits + 1024 * 1024;  
    bfh.bfType = (WORD)0x4d42;//必须表示"BM"  
  
    fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);  
    fwrite(&bih, 1, sizeof(bih), fp);

    for(int j=0;j

生成图片如下:


注释部分的一张为:


你可能感兴趣的:(c++,音视频)