【发布时间】:2013-02-04 12:20:22
【问题描述】:
我必须将非 DWORD 对齐的原始像素数据(行 *col = 479 * 638)转换为 DWORD 对齐的位图数据。我没有什么疑问。
1) 当我说 d 字对齐时,它是关于分配 dword 对齐的总内存还是关于使宽度 DWORD 对齐?
2) 说如果它是关于使实际宽度为 DWORD 对齐,那么由于 DWORD 对齐,我在末尾添加了额外的 2 个字节以使宽度 = 640。但是当我从源到目标进行 memcopy 时它离开了底部有一条深黑色的线。但我不想要这些暗线,因为它会与实际图像产生混淆。那么如何才能避免最后出现这条黑线呢?
为了解决这个问题,我假设这是关于分配的总内存,它是双字对齐的。我分配了那么多双字对齐的内存。
bitmapData = (LPBYTE) GlobalAlloc(GMEM_FIXED, bmiHeader->biSizeImage);
在哪里bmiHeader->biSizeImage = nrows * dowrdalignedwidth * BPP.
在进行实际的内存复制时,我正在复制并写信给rows*cols*BPP。这是正确的吗?
【问题讨论】:
-
等一下,你是先问“如何将数据转换为 DWORD 对齐格式”(无论是什么格式),然后是“什么是 DWORD 对齐格式”?
-
如果您在谈论图像格式,很可能某些项目或其位置(绝对,从文件开头或相对于其他项目)必须是某物的倍数并且具有与这些相同的项目是否出现在内存中以某种方式对齐的位置几乎没有关系。
-
你的像素格式是什么,即每个像素有多少位?
-
嗨 Bartek,我了解 DWORD 对齐。根据我的理解,它是关于确保总大小甚至是 sizeof(DWORD 的倍数。但我的实际问题是,DWORD 是关于通过执行 bitmapData = (LPBYTE) GlobalAlloc(GMEM_FIXED, bmiHeader- >biSizeImage) 或者它是关于使宽度 * 高度 * bpp 作为 DWORD 对齐?
-
bpp = 4;给出一个清晰的概念 - 像素数据有 rows = 479, colns = 638 和 bpp = 4;当我创建一个位图数据以使其与 DWORD 对齐时,我使用一些逻辑并使宽度 = 640。然后它将从 479*638*BPP => 479*640*BPP 写入。因此,由于填充位,最后会出现一条黑线。我在这里做错了吗?
标签: c++ visual-c++ dword