我刚刚在过去几天中看到了这一点,无法弄清楚它是如何工作的。我谈论的视频是here:
这是堆栈溢出问题中的the top rated answer:Why was this program rejected by three compilers?
该位图如何显示“Hello World”的C++程序?
最佳答案
BMP(DIB)图像由 header 和未压缩的1彩色数据组成(对于24 bpp图像,每个像素3字节,以反向行顺序存储,行距为4字节)。
颜色数据的字节用于表示颜色(即文件格式2都不要求它们,它们都来自每个像素的颜色),并且像素颜色和写入的字节之间存在完美的1:1对应关系。文件;因此,使用完美选择的颜色,您实际上可以在文件中写入所需的任何内容( header 除外)。
在记事本中打开生成的文件时,颜色数据将显示为文本;您仍然可以清楚地从标题(从BM
到文本开头的部分)中看到文件格式所规定的内容。
在我看来,该视频是通过以下方式完成的:首先,作者计算了位图所需的大小,并创建了一个正确大小的DIB文件,其中填充了可扩展为简单模式的颜色(例如,所有字节65 => 'A'
);然后将其替换为“有效载荷”代码,如视频所示。
但是请注意,用记事本手工制作整个产品并不是没有可能-通过颜色选择器对话框,ASCII表和DIB格式的基本知识就可以完成,但这会慢得多并且容易出错。
More info about the DIB format