我试图打开 bg.png 文件,但没有用。没有错误,但什么也没有出现。帮我!
int main()
{
initwindow(600,600,"GAME");
ifstream image("bg.png");
getimage(50, 50 , 450 , 450 , image);
putimage(50,50,image,COPY_PUT);
system("pause");
}
原文由 Bayarjargal Jargalsaikhan 发布,翻译遵循 CC BY-SA 4.0 许可协议
graphics.h
是来自 Borland 的古老 BGI 库,我找到了这个文档:所以这只是将图像从您的屏幕复制到一些内存缓冲区(以允许后缓冲技术)。你用
ifstream
来调用它,这是错误的。您正在用内存缓冲区或其指针指向的区域覆盖指针(取决于getimage
行为)。如果您真的想为此使用 BGI ,则将图像解码到内存并使用putimage
来查看它。但恐怕它不是以 RAW 编码的,更安全的是直接使用像素访问来绘制图像。正如我写给你的另一个问题一样,你需要使用一些库或编码图像解码你自己。
iostream
这不是一个好方法。对于 MS-DOS 使用 OS api (
int 21h
如果你没有正确覆盖它的功能) …对于 Windows 和 Borland 环境使用FileOpen FileRead FileClose
。对于非 Borland 环境,使用 WinAPI 或来自目标 操作系统(如果不是 windows)的相关 API 。要解码图像,您首先需要选择要解码的文件格式,我建议从 PCX、BMP (仅限于单像素格式)或 TGA 开始。像 JPG、PNG、GIF 这样的文件格式对于新手程序员来说实在是太多了。例如,我在 C++ 中的 GIF 解码器/编码器大约是36 KByte
的源代码 + 另一个15 KBytes
用于文件缓存 缓冲 和 多线程 RT 编码调度程序。与具有大约1.5KByte
的代码来加载/解码它的 PCX 相比。这是我如何在 Borland/Embarcadero VCL C++ Windows 中将纹理加载到我的 GL 引擎的小例子:
由于您的代码看起来像是在 MS-DOS 中,这将不起作用。但您可以提取不使用任何库的 PCX 部分。只需移植代码(替换
AnsiString
并使用您可以使用的功能进行文件访问)Graphics::TBitmap
是 VCL/GDI 位图,了解其使用请参见:所以你可以把它移植到你的 BGI 。您也可以忽略所有
#ifdef _mmap_h
与此相关的内存泄漏跟踪/调试剩余的东西:并在这里查看 PCX 文件格式规范