Вы должны объявить эту переменную перед ее использованием ...
Pixel * tempPixel = new Pixel[image.infoHeader.biWidth * image.infoHeader.biHeight];
Обратите внимание, что вы должны освободить временный массив в конце функции с помощью delete[]
(в противном случае у вас есть утечка памяти),Чтобы сделать это автоматическим и избежать проблем с безопасностью исключений, вы должны использовать умный указатель, например scoped_array<Pixel>
от Boost или (если у вас есть компилятор, поддерживающий новый стандарт C ++) unique_ptr<Pixel[]>
.
Evenлучше: вы можете просто использовать std::vector<Pixel>
std::vector<Pixel> tempPixel(image.infoHeader.biWidth * image.infoHeader.biHeight);
и позволить ему иметь дело с распределением / освобождением.
Упреждающее исправление ответа (из-за вашего нового вопроса ): если в конце вы собираетесь назначить tempPixel
на image.pixels
, то вы не должны delete[]
tempPixel
, в противном случае image
будет заменен указателем на освобожденную память.
Но у вас есть большие проблемы: когда вы заменяете image.pixels
, вы не освобождаете память, на которую указывали ранее.Поэтому вы должны освободить эту память и , а затем назначить tempPixel
ей.
Все это при условии, что image.pixels
было выделено с new
и будетбыть освобожденным с delete[]
(в противном случае вы получите несоответствие функций / операторов распределения).
Кстати, если ваше изображение представляет собой просто оболочку для Windows DIB (BMP), как это видно из имен полей заголовка, вы не принимаете во внимание тот факт, что строки пикселей выровнены по 4 байта (так чтоесли ваше изображение не 32bpp, вы должны выделить больше памяти и выполнить пиксельное копирование соответственно.