Make raw data copy only when needed

This commit is contained in:
2019-09-26 12:44:32 +02:00
parent fa025dff0e
commit cdec3ea444
+18 -19
View File
@@ -37,27 +37,26 @@ bool loadRAW(QString path, ImageInfoData &info, RawImageAbs **image, QImage *qi
if(raw.unpack())
return false;
libraw_rawdata_t rawdata = raw.imgdata.rawdata;
size_t size = rawdata.sizes.width*rawdata.sizes.height;
std::vector<uint16_t> out;
out.resize(size);
size_t d = 0;
uint h=rawdata.sizes.top_margin+rawdata.sizes.height;
uint w=rawdata.sizes.left_margin+rawdata.sizes.width;
size_t pitch = rawdata.sizes.raw_pitch/sizeof(uint16_t);
for(size_t i=rawdata.sizes.top_margin;i<h;i+=2)
{
for(size_t o=rawdata.sizes.left_margin;o<w;o+=2)
{
uint16_t p = rawdata.raw_image[i*pitch+o];
out[d++] = p;
}
}
if(image)
{
libraw_rawdata_t rawdata = raw.imgdata.rawdata;
size_t size = rawdata.sizes.width*rawdata.sizes.height;
std::vector<uint16_t> out;
out.resize(size);
size_t d = 0;
uint h=rawdata.sizes.top_margin+rawdata.sizes.height;
uint w=rawdata.sizes.left_margin+rawdata.sizes.width;
size_t pitch = rawdata.sizes.raw_pitch/sizeof(uint16_t);
for(size_t i=rawdata.sizes.top_margin;i<h;i++)
{
for(size_t o=rawdata.sizes.left_margin;o<w;o++)
{
uint16_t p = rawdata.raw_image[i*pitch+o];
out[d++] = p;
}
}
*image = new RawImage<uint16_t>(w, h, out);
}