Menulis Imej BMP dalam C/C Tulen Tanpa Perpustakaan Luaran
Apabila membangunkan algoritma yang memerlukan output maklumat, ia menjadi perlu untuk menjana output dalam pelbagai format. Satu format biasa ialah imej BMP. Artikel ini menangani masalah mencipta imej BMP monokromatik daripada matriks boolean, di mana unsur benar diwakili sebagai piksel putih.
Struktur Pengepala BMP
A BMP (Bitmap Fail imej) terdiri daripada bahagian pengepala diikuti dengan data imej. Pengepala mengandungi maklumat penting tentang dimensi imej, kedalaman warna dan format mampatan. Berikut ialah pecahan komponen utama:
Kod untuk Menjana Imej BMP daripada Boolean Matrix
Coretan kod berikut menunjukkan cara mencipta imej BMP daripada matriks boolean tanpa bergantung pada perpustakaan luaran:
FILE *f; unsigned char *img = NULL; int filesize = 54 + 3*w*h; // w and h are image width and height // Allocate memory for image data img = (unsigned char *)malloc(3*w*h); memset(img,0,3*w*h); // Fill img byte array with pixel data for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { int x = i, y = (h-1)-j; int r, g, b; // Color components // Set pixel color based on matrix element if (matrix[i][j]) { r = g = b = 255; // White pixel } else { r = g = b = 0; // Black pixel } // Write pixel color components to image data array img[(x+y*w)*3+2] = (unsigned char)(r); img[(x+y*w)*3+1] = (unsigned char)(g); img[(x+y*w)*3+0] = (unsigned char)(b); } } // Set BMP header values unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0}; unsigned char bmpinfoheader[40] = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0}; // Update file size bmpfileheader[ 2] = (unsigned char)(filesize ); bmpfileheader[ 3] = (unsigned char)(filesize>> 8); bmpfileheader[ 4] = (unsigned char)(filesize>>16); bmpfileheader[ 5] = (unsigned char)(filesize>>24); // Update image width and height bmpinfoheader[ 4] = (unsigned char)( w ); bmpinfoheader[ 5] = (unsigned char)( w>> 8); bmpinfoheader[ 6] = (unsigned char)( w>>16); bmpinfoheader[ 7] = (unsigned char)( w>>24); bmpinfoheader[ 8] = (unsigned char)( h ); bmpinfoheader[ 9] = (unsigned char)( h>> 8); bmpinfoheader[10] = (unsigned char)( h>>16); bmpinfoheader[11] = (unsigned char)( h>>24); // Save BMP image to file f = fopen("img.bmp","wb"); fwrite(bmpfileheader, 1, 14, f); fwrite(bmpinfoheader, 1, 40, f); for (int i = 0; i < h; i++) { fwrite(img+(w*(h-i-1)*3), 3, w, f); fwrite(bmppad, 1, (4-(w*3)%4)%4, f); // Pad to 4-byte boundary } // Free resources free(img); fclose(f);
Dengan mengikut langkah-langkah yang digariskan dalam kod ini, anda boleh berjaya menjana imej BMP monokromatik daripada matriks boolean, memberikan cara untuk menggambarkan dan mengeluarkan hasil algoritma anda.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Imej BMP Monokromatik daripada Matriks Boolean dalam C/C Tulen Tanpa Pustaka Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!