Я пытаюсь создать файл изображения на языке C. Формат изображения, которым я хочу быть, - RGB565. Я следил за этими двумя веб-сайтами 1 2 , чтобы попытаться получить видимое изображение, но мне кажется, что оно не работает. Проблема в функции "fwrite" из-за мелочей?
Для тестирования я хочу изображение размером 16 * 4 и все пиксели одного цвета. (Код является беспорядком, поскольку он используется только для целей тестирования, прежде чем внедрять его в более крупный проект.
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main() {
uint16_t myData[64];
for(int i = 0; i<64; i++)
{
myData[i] = 0x241B; //Random Color
}
typedef struct /**** BMP file header structure ****/
{
uint16_t bfType; /* Magic number for file */
uint32_t bfSize; /* Size of file */
uint16_t bfReserved1; /* Reserved */
uint16_t bfReserved2; /* ... */
uint32_t bfOffBits; /* Offset to bitmap data */
} BITMAPFILEHEADER;
typedef struct /**** BMP file info structure ****/
{
uint32_t biSize; /* Size of info header */
uint32_t biWidth; /* Width of image */
uint32_t biHeight; /* Height of image */
uint16_t biPlanes; /* Number of color planes */
uint16_t biBitCount; /* Number of bits per pixel */
uint32_t biCompression; /* Type of compression to use */
uint32_t biSizeImage; /* Size of image data */
uint32_t biXPelsPerMeter; /* X pixels per meter */
uint32_t biYPelsPerMeter; /* Y pixels per meter */
uint32_t biClrUsed; /* Number of colors used */
uint32_t biClrImportant; /* Number of important colors */
} BITMAPINFOHEADER;
BITMAPFILEHEADER myFileHeader = {0x4D42, 198, 0, 0, 70};
BITMAPINFOHEADER myInfoHeader = {40, 16, 4, 1, 16, 0, 0, 1000, 1000, 0, 0};
uint32_t RGB565ColorTable[] = {0x7E00000, 0xF8000000, 0x001F0000, 0};
FILE *fptr; fptr = fopen("testImage.bmp","w+");
if(fptr == NULL) {
printf("Error!");
exit(1); }
fwrite(&myFileHeader, sizeof(BITMAPFILEHEADER), 1, fptr);
fwrite(&myInfoHeader, sizeof(BITMAPINFOHEADER), 1, fptr);
fwrite(&RGB565ColorTable, sizeof(RGB565ColorTable), 1, fptr);
fwrite(&myData, sizeof(myData), 1, fptr);
fclose(fptr);
return 0; }
Hex Output (после добавления атрибута ((упакованный)) к структурам):
![enter image description here](https://i.stack.imgur.com/zr67z.png)