まあ、メモリ割り当てはおそらくあなたが示した場所には行かないでしょう:
pixel_t *pixels = malloc(((bmp->dib.bmp_bytesz/3)+1) * sizeof(*pixels));
if (pixels == 0)
...deal with out of memory error...
for (int i = 0; i <= bmp->dib.dmp_bytesz/3; i++)
{
pixels[i].blue = ...;
pixels[i].green = ...;
pixels[i].red = ...;
}
はループ内+1
を可能に<=
します。が正しいfor
ことを注意深く確認してください。ループで<=
使用する方が一般的<
です。for
の場合、配列...
にピクセルがある場合はどうなりますか? char
それをステップスルーしてピクセルにコピーするにはどうすればよいですか?
いくつかの方法のいずれかでそれを行うことができます。ピクセル配列が にあると仮定するとunsigned char *pixel_array;
、次を使用できます。
unsigned char *p = pixel_array;
for (int i = 0; i <= bmp->dib.dmp_bytesz/3; i++)
{
pixels[i].blue = *p++;
pixels[i].green = *p++;
pixels[i].red = *p++;
}
また:
for (int i = 0; i <= bmp->dib.dmp_bytesz/3; i++)
{
pixels[i].blue = pixel_array[i*3+0];
pixels[i].green = pixel_array[i*3+1];
pixels[i].red = pixel_array[i*3+2];
}
青、緑、赤の順序が正しいことを確認してください。