24ビットビットマップを、それが構成されているピクセルの16進文字列表現に変換するための次のアルゴリズムがあります。
// *data = previously returned data from a call to GetDIBits
// width = width of bmp
// height = height of bmp
void BitmapToString(BYTE *data, int width, int height)
{
int total = 4*width*height;
int i;
CHAR buf[3];
DWORD dwWritten = 0;
HANDLE hFile = CreateFile(TEXT("out.txt"), GENERIC_READ | GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
for(i = 0; i < total; i++)
{
SecureZeroMemory(buf, 3);
wsprintfA(buf, "%.2X", data[i]);
// only write the 2 characters and not the null terminator:
WriteFile(hFile, buf, 2, &dwWritten, NULL);
}
WriteFile(hFile, "\0", 2, &dwWritten, NULL);
CloseHandle(hFile);
}
問題は、各行の終わりのパディングを無視したいということです。たとえば、すべてのピクセルの値が#7f7f7fである2x2ビットマップの場合、out.txtのコンテンツにはパディングバイトも含まれます。
7F7F7F7F7F7F00007F7F7F7F7F7F0000
パディングゼロが含まれないようにループを調整するにはどうすればよいですか?