BMP 文件阅读器可以满足您的需求。您可以获得任何好的 BMP 文件阅读器并根据您的目的对其进行调整。例如:这个问题和答案给出了一个假定 24 位 BMP 格式的 BMP 文件阅读器。您的格式是 16 位的,因此需要进行一些调整。
这是我这样做的尝试(没有测试,所以你应该对硬编码的细节持保留态度)。
int i;
FILE* f = fopen(filename, "rb");
unsigned char info[54];
fread(info, sizeof(unsigned char), 54, f); // read the 54-byte header
int width = 320, height = 240; // might want to extract that info from BMP header instead
int size_in_file = 2 * width * height;
unsigned char* data_from_file = new unsigned char[size_in_file];
fread(data_from_file, sizeof(unsigned char), size_in_file, f); // read the rest
fclose(f);
unsigned char pixels[240 * 320][3];
for(i = 0; i < width * height; ++i)
{
unsigned char temp0 = data_from_file[i * 2 + 0];
unsigned char temp1 = data_from_file[i * 2 + 1];
unsigned pixel_data = temp1 << 8 | temp0;
// Extract red, green and blue components from the 16 bits
pixels[i][0] = pixel_data >> 11;
pixels[i][1] = (pixel_data >> 5) & 0x3f;
pixels[i][2] = pixel_data & 0x1f;
}
注意:这假设您的LCD_ReadRAM
功能(大概是从 LCD 内存中读取内容)提供标准 5-6-5 格式的像素。
名称 5-6-5 表示为每个颜色分量(红、绿、蓝)分配的每个 16 位数中的位数。还存在其他分配,例如5-5-5,但我在实践中从未见过它们。