Windows下的简单绘图肯定会首先考虑GDI或者GDI+,不过既然LZ都提到Linux了,那就发个好了,这个就是最原始的手动生成BMP的代码,其实也不是很复杂。 --------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long LONG; #pragma pack(2) typedef struct { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; typedef struct { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER; void saveBitmap() { // Define BMP Size const int height = 600; const int width = 800; const int size = height * width * 3; double x, y; int index; // Part.1 Create Bitmap File Header BITMAPFILEHEADER fileHeader; fileHeader.bfType = 0x4D42; fileHeader.bfReserved1 = 0; fileHeader.bfReserved2 = 0; fileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + size; fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); // Part.2 Create Bitmap Info Header BITMAPINFOHEADER bitmapHeader = {0}; bitmapHeader.biSize = sizeof(BITMAPINFOHEADER); bitmapHeader.biHeight = height; bitmapHeader.biWidth = width; bitmapHeader.biPlanes = 3; bitmapHeader.biBitCount = 24; bitmapHeader.biSizeImage = size; bitmapHeader.biCompression = 0; //BI_RGB // Part.3 Create Data BYTE *bits = (BYTE *)malloc(size); // Clear memset(bits, 0xFF, size); // Sin Graph for(x = 0; x < 800; x += 0.5) { y = sin(x / 100.0) * 200 + 300; index = (int)y * 800 * 3 + (int)x * 3; bits[index + 0] = 255; // Blue bits[index + 1] = 0; // Green bits[index + 2] = 0; // Red } // Write to file FILE *output = fopen("output.bmp", "wb"); if(output == NULL) { printf("Cannot open file!\n"); } else { fwrite(&fileHeader, sizeof(BITMAPFILEHEADER), 1, output); fwrite(&bitmapHeader, sizeof(BITMAPINFOHEADER), 1, output); fwrite(bits, size, 1, output); fclose(output); } } int main() { saveBitmap(); return 0; }
平台无关的生成BMP的代码
最新推荐文章于 2023-01-11 17:53:21 发布