0

ファイルから読み取った動的なピクセル数にメモリを割り当てる最善の方法を決定しようとしています。ヘッダー ファイルからのピクセル データのバイト数があります。

私は次の方法でそれを試していますが、何かが欠けています。

typedef struct {
    unsigned char blue;
    unsigned char green;
    unsigned char red;
} pixel_t; 

for(i = 0; i <= ((bmp->dib.bmp_bytesz) / 3); i++) {
    // Something here?
}   
4

2 に答える 2

2

まあ、メモリ割り当てはおそらくあなたが示した場所には行かないでしょう:

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];
}

青、緑、赤の順序が正しいことを確認してください。

于 2013-07-18T02:19:23.327 に答える
1

for ループで何かを行う前に、ピクセルにメモリを割り当てる必要があります。

typedef struct {
    unsigned char blue;
    unsigned char green;
    unsigned char red;
} pixel_t; 
pixel_t *pixel = (pixel_t *)malloc(bmp->dib.bmp_bytesz);
if(pixel == NULL) { exit(-1); }

for(i = 0; i < ((bmp->dib.bmp_bytesz) / 3); i++) {
    // Something here?
    pixel[i].blue = bmp->dib[3 * i];
    pixel[i].green = bmp->dib[3 * i + 1];
    pixel[i].red = bmp->dib[3 * i + 2];
}
于 2013-07-18T02:19:22.907 に答える