繁体   English   中英

在 13h 图形模式下显示 bitmap,使用 C++

[英]Displaying a bitmap in 13h graphics mode, with use of C++

我正在尝试显示 320x200x8 bitmap。 我的调色板工作得很好,但是当我尝试显示这些位时,图像是颠倒的。 这里应该改变什么?

    void display_image_data(char *file_name)
{
 bitmap_file = fopen(file_name, "rb");
 fread(&bmfh, sizeof(bmfh), 1, bitmap_file);
 fread(&bmih, sizeof(bmih), 1, bitmap_file);
 fread(&palette[0], bmih.biClrUsed * sizeof(RGBQUAD),  1, bitmap_file);
 fread(&video_memory[0], bmih.biWidth * bmih.biHeight, 1, bitmap_file);
 fclose(bitmap_file);
}

BMP 文件源自使用标准图形轴的 OS/2 — 原点位于显示屏的左下方,正 y 向上移动屏幕。 以 OS/2 顺序存储然后以光栅顺序显示的数据将看起来是颠倒的。

因此,您只需逐行读取数据并将这些行存储在正确的位置。

看起来你已经假设了一个最多 200 行的源文件,并且正在将数据直接加载到视频缓冲区(即A000:0000 ),所以对你来说等价的就很简单:

for(int y = bmih.biHeight - 1; --y; y >= 0) {
    fread(&video_memory[y * 320], bmih.biWidth, 1, bitmap_file);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM