Make raw data copy only when needed
This commit is contained in:
+4
-5
@@ -37,6 +37,8 @@ bool loadRAW(QString path, ImageInfoData &info, RawImageAbs **image, QImage *qi
|
|||||||
if(raw.unpack())
|
if(raw.unpack())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if(image)
|
||||||
|
{
|
||||||
libraw_rawdata_t rawdata = raw.imgdata.rawdata;
|
libraw_rawdata_t rawdata = raw.imgdata.rawdata;
|
||||||
size_t size = rawdata.sizes.width*rawdata.sizes.height;
|
size_t size = rawdata.sizes.width*rawdata.sizes.height;
|
||||||
|
|
||||||
@@ -47,17 +49,14 @@ bool loadRAW(QString path, ImageInfoData &info, RawImageAbs **image, QImage *qi
|
|||||||
uint w=rawdata.sizes.left_margin+rawdata.sizes.width;
|
uint w=rawdata.sizes.left_margin+rawdata.sizes.width;
|
||||||
size_t pitch = rawdata.sizes.raw_pitch/sizeof(uint16_t);
|
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 i=rawdata.sizes.top_margin;i<h;i++)
|
||||||
{
|
{
|
||||||
for(size_t o=rawdata.sizes.left_margin;o<w;o+=2)
|
for(size_t o=rawdata.sizes.left_margin;o<w;o++)
|
||||||
{
|
{
|
||||||
uint16_t p = rawdata.raw_image[i*pitch+o];
|
uint16_t p = rawdata.raw_image[i*pitch+o];
|
||||||
out[d++] = p;
|
out[d++] = p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(image)
|
|
||||||
{
|
|
||||||
*image = new RawImage<uint16_t>(w, h, out);
|
*image = new RawImage<uint16_t>(w, h, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user