c++ - 对位图图像使用 X、Y 坐标

标签 c++ bitmap coordinates

我有一个 c/c++ 程序在我的 Linux 机器上运行,它加载一个 24 位位图,读取两个 header ,然后将图像数据存储到一个 char* 变量中。我已经通过将变量内容转储到原始二进制文件并将其与原始位图+偏移量进行比较来验证这项工作。我使用了 HERE 中的代码并且未修改并注意或重新排序为 RGB 并自下而上。

现在,如果我有一个坐标列表,例如 X、Y、宽度、高度,我到底该如何将它们转换为图像的字节偏移量?!

MY CODE您看到我正在计算一条扫描线的宽度和字形位置以找到 Y,然后为每个 y+1 添加一条扫描线。类似地,对于 X,我一次迭代三个字节。最后,我将这三个字节按顺序存储到我的临时字符数组中。

事实上,我不需要像素数据,因为字形是 0xFF 或 0x00,没有进行平滑处理。我将其包括在内是为了确保我的位被计算在内。

HERE是我正在使用的图像。

编辑:----------------------------------------

如下所述,我的数学有点古怪。将 i,j,k 循环中的行固定为:

tmpChar[i][j][k] = img.data[(((Y+j) * imgWidth) + (X + i)) * imgBPP + k];

至于我的程序输出 HERE如您所见,它可以很好地加载位图并且 header 信息是正确的,但是当我尝试显示 tmpChar 数组的内容时,它的所有内容都是 0xFF(我使用了一个带符号的 int,所以 0xFF = -1 和 0x00 = +0)

最佳答案

图像在内存中的布局是(忽略我可能已经颠倒了 R、G 和 B):

[R of pixel 0]  [G of pixel 0] [B of pixel 0] ....... [B of (0, imgWidth-1)] [R of pixel (1, 0)] .....

因此要计算任何给定像素的偏移量:offset = ((Y * imgWidth) + X) * imgBPP + colorByte

据我所知,假设你的角色 X 和 Y 是正确的:

tmpChar[i][j][k] = img.data[(((Y+j) * imgWidth) + (x + i)) * imgBPP + k];

关于c++ - 对位图图像使用 X、Y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13781203/

相关文章:

c++ - .idl 导入接口(interface)中的 coclass 在别处定义?

c++ - 有没有办法防止在派生类的实例上调用基类方法?

特定索引处的 C++ vector 删除无法正常工作

ios - 在 Swift 中获取多个触摸的坐标

java - 在 HashSet 中存储坐标

c++ - C++ 和 Opengl 中的多显示器应用程序

c++ - HBITMAP/BITMAP 到 BITMAPINFOHEADER -> 通过网络 -> BITMAPINFOHEADER 到 HBITMAP/BITMAP

android - 图像尺寸加倍

c# - AND C# 中的两个位图

android - 使用 SQLite 和 Android 查找附近的位置