在沒有外部函式庫的情況下用純C/C 編寫BMP 影像
在某些計算演算法中,建立視覺化輸出對於分析和演示至關重要。處理布林矩陣時,產生單色 BMP 影像可能是視覺化資料的合適方法。然而,在不依賴外部庫的情況下從頭開始建立 BMP 映像似乎令人畏懼。
此任務涉及定義影像標題並以特定格式組織像素資料。 BMP 標頭提供有關圖像的重要信息,包括其寬度、高度和顏色深度。對於單色影像,每個像素都可以用單位元表示,指示其顏色(白色或黑色)。
這裡有一個詳細的程式碼片段,示範如何使用純布林矩陣將布林矩陣編寫為單色BMP 影像C/C :
#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { // Image dimensions int width = 100, height = 100; // Boolean matrix representing the image data bool matrix[width][height]; // File pointer for writing the BMP image FILE* f = fopen("image.bmp", "wb"); // BMP file header unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0}; // BMP image data header unsigned char bmpinfoheader[40] = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 1,0}; // Set file size in header bmpfileheader[ 2] = (width + 7) / 8 * height; // Adjust image width and height in header bmpinfoheader[ 4] = width; bmpinfoheader[ 8] = height; // Write the BMP header and image data fwrite(bmpfileheader, 1, 14, f); fwrite(bmpinfoheader, 1, 40, f); // Iterate over the matrix and write each row as a bitmask for (int i = 0; i < height; i++) { // Create a bitmask for the current row unsigned char rowdata = 0; for (int j = 0; j < width; j++) { if (matrix[j][i]) { // Set the corresponding bit in the bitmask rowdata |= 1 << (7 - j); } } fwrite(&rowdata, 1, 1, f); } fclose(f); return 0; }
在此程式碼中,BMP 標頭包含圖像寬度和高度作為標頭資料的一部分。寫入標頭後,程式碼會迭代布林矩陣的每一行並建構一個位元遮罩來表示對應的像素值。位元遮罩中的每一位指示像素是白色還是黑色。透過順序寫入這些位元掩碼,產生的 BMP 檔案將準確地將布林矩陣顯示為單色影像。
以上是如何在沒有外部函式庫的情況下在純 C/C 中從布林矩陣建立單色 BMP 影像?的詳細內容。更多資訊請關注PHP中文網其他相關文章!