У меня есть структура, которая в основном имеет следующее содержимое:
typedef struct {
unsigned int width, height;
float *r, *g, *b;
} image;
Используя библиотеку FreeImage.h, я могу открыть определенное изображение и связать пиксели с его цветами RGB.Итак, код выглядит следующим образом:
imagem open_image(char *name_of_file) {
FIBITMAP *bitmapIn;
int x, y;
RGBQUAD color;
image I;
bitmapIn = FreeImage_Load(FIF_JPEG, name_of_file, 0);
if (bitmapIn == 0) {
printf("Error! File not found - %s\n", name_of_file);
} else {
printf("File found!\n");
}
x = FreeImage_GetWidth(bitmapIn);
y = FreeImage_GetHeight(bitmapIn);
I.width = x;
I.height = y;
I.r = malloc(sizeof(float) * x * y);
I.g = malloc(sizeof(float) * x * y);
I.b = malloc(sizeof(float) * x * y);
for (int i=0; i<x; i++) {
for (int j=0; j <y; j++) {
int idx;
FreeImage_GetPixelColor(bitmapIn, i, j, &color);
idx = i + (j*x);
I.r[idx] = color.rgbRed;
I.g[idx] = color.rgbGreen;
I.b[idx] = color.rgbBlue;
}
}
return I;
}
Так что теперь, когда я вызываю функцию в моем главном файле, например:
image img = open_image("file_name");
У меня есть изображение "map" в моей ссылке с именем img.
По сути, я хочу знать, каков наилучший способ сделать копию этого img, чтобы я мог применить фильтр в этом буфере img, например, фильтр размытия.Таким образом, когда я получаю значения окружающих пикселей для записи в центральный, это всегда исходные пиксели, поэтому беру пиксели из «img» и записываю их с фильтром в «img_buffer».
Я думаю,Я мог бы просто сделать еще одну ссылку с именем img_buff и снова вызвать функцию open_image, но это отнимает много реального и пользовательского времени.
Так как бы вы предложили мне сделать копию?Из моего исследования я обнаружил, что memcpy (), возможно, не справится с задачей, поскольку дает мне мелкую копию, но не уверен в этом.
Любое предложение, которое не займет намного больше реального времени / времени пользователяДобро пожаловать!