1

ある構造体の内容を別の一時構造体にコピーしようとしているので、結果に影響を与えずに一時構造体の RGB ピクセルを変更できます (代わりにグローバル ピクセルを変更した場合)。

コード構造

//the pixel structure
typedef struct {
    GLubyte r, g, b;
} pixel;

//the global structure
typedef struct {
    pixel *data;
    int w, h;
} glob;
glob global, original, temp;

私のコピーコード

void copyPic(glob *source, glob *dest){
    int x,y;
    dest -> w = source -> w;
    dest -> h = source -> h;
    dest -> data = (pixel *) malloc(dest->w * dest->h * sizeof(pixel*));
    for (x=0; x < dest -> w; x++)
        for (y=0; y < dest -> h; y++){
            memcpy(dest->data[x+y*dest->w], source->data[x+y*dest->w], sizeof(pixel))

        }

}

アイデア: glob 構造体は、R、G、B 値の配列へのポインターである画像の幅、高さ、および pixel* データを保持します。

グローバルを一時的にコピーしたいので、temp->data の RGB を変更しても、現在実行中のコードには影響せず、RGB を global->data の RGB から変更することに基づいています。

新しいコード

void copyPic(glob *src, glob *dest){

dest -> w = src -> w;
dest -> h = src -> h;
dest -> data = (pixel *) malloc(dest->w * dest->h * sizeof(pixel));

memcpy(dest->data, src->data, sizeof(pixel) * dest->w  * dest->h);

}

何かを解放する必要がありますか?

4

2 に答える 2

2

何度も電話memcpyしています (w * h)。一度だけコピーすることをお勧めします

memcpy(dest->data, source->data, sizeof(pixel) * w * h);
于 2013-10-07T21:48:48.967 に答える