gpt4 book ai didi

C++:.bmp 到文件中的字节数组

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:46 25 4
gpt4 key购买 nike

是的,我已经解决了与此相关的其他问题,但我发现它们没有太大帮助。他们提供了一些帮助,但我仍然有点困惑。所以我需要做的是:

我们有一个 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];
}

关于C++:.bmp 到文件中的字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com