是的,我已经解决了与此相关的其他问题,但我发现它们没有太大帮助。他们提供了一些帮助,但我仍然有点困惑。所以这是我需要做的:
我们有一个 132x65 的屏幕。我有一个 132x65 的 .bmp。我想遍历 .bmp 并将其分成小的 1x8 列以获取该 32 位列的二进制文件。然后横向做 132 次,向下做 9 次。任何不是白色的东西都应该算作一点。例子:
如果图片的左上角像素是非白色的任何颜色,并且其下方的 7 个像素是白色,那么这将是数组的第一个元素,即该数字的十六进制,因此数组将如下所示: array [ ] = { 0x01 } 然后它将继续填充这 132 列,然后对行的 9 个“部分”再次执行此操作。文件结果将只是单独文件中的该数组。
我了解此头格式,我已阅读有关 .bmp 文件格式的 wiki 文章,我的主要问题是当我真正希望它进入内部并与每个像素交互时,我真的不知道如何与 .bmp 交互从图像中。我真的不需要整个事情,但也许只是从 .bmp 中抓取每个像素并将像素的颜色输出到文件或其他内容中的示例。我的c++有点生疏(最近一直在做java和javscript)。
如果您想读取已知格式的 BMP 并且不关心它是如何完成的(即,仅限内部的事情),您可以只获取 BMP,忽略标题并将其用作像素数组。它从左下角开始逐行存储。它的打包方式存在一些细节问题,但根据我的经验,如果您拍摄 32bpp 图像,则可以完全忽略它。
举一个非常简单的例子:
unsigned int *buffer;
void readfile() {
FILE *f = fopen("file.bmp", "rb");
buffer = new unsigned int[132*65];
fseek(f, 54);
fread(buffer, 132*65*4, 1, f);
fclose(f);
}
unsigned int getpixel(int x, int y) {
//assuming your x/y starts from top left, like I usually do
return buffer[(64 - y) * 132 + x];
}
Run Code Online (Sandbox Code Playgroud)