Для копии в памяти, используйте memcpy
, как говорит DReJ, но если вы хотите сохранить изображение в формате PNG, вы можете сделать хуже, чем смотреть на простую простую библиотеку PNG, такую как LodePNG:
http://members.gamedev.net/lode/projects/LodePNG/
Я бы не стал тратить время на перекомпоновку стороны сжатия, если бы была простая альтернатива - есть более важные проблемы, над которыми вы можете работать.
РЕДАКТИРОВАТЬ - мой код для сохранения PNG с использованием LodePNG стоит того:
void PNGSaver::save_image24(const std::string& filename, const Image24_CPtr& image)
{
std::vector<unsigned char> buffer;
encode_png(image, buffer);
LodePNG::saveFile(buffer, filename);
}
void PNGSaver::encode_png(const Image24_CPtr& image, std::vector<unsigned char>& buffer)
{
int width = image->width();
int height = image->height();
const int pixelCount = width*height;
// Construct the image data array.
std::vector<unsigned char> data(pixelCount*4);
unsigned char *p = &data[0];
for(int y=0; y<height; ++y)
for(int x=0; x<width; ++x)
{
Pixel24 pixel = (*image)(x,y);
*p = pixel.r();
*(p+1) = pixel.g();
*(p+2) = pixel.b();
*(p+3) = 255;
p += 4;
}
// Encode the PNG.
LodePNG::encode(buffer, &data[0], width, height);
}