【问题标题】:Displaying a bitmap in 13h graphics mode, with use of C++使用 C++ 以 13h 图形模式显示位图
【发布时间】:2021-05-30 16:31:10
【问题描述】:

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

    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);
}

【问题讨论】:

标签: c++ bitmap


【解决方案1】:

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);
}

【讨论】:

    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    相关资源
    最近更新 更多