From a75a41eb6d9d3ceed5eebc67b0a25563d16518b7 Mon Sep 17 00:00:00 2001 From: Oliver Duis Date: Sat, 3 Sep 2011 13:38:41 +0200 Subject: [PATCH] Fixed a crash with Canon SRAWs and other non-bayer pattern formats see issue 957 --- rtengine/rawimagesource.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 084a5ac8e..777c76e68 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -1219,6 +1219,28 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, Raw //#undef BS + } // flatfield + } else { + // No bayer pattern + // TODO: Is there a flat field correction possible? + if (!rawData) rawData = allocArray(3*W,H); + + if (riDark && W == riDark->get_width() && H == riDark->get_height()) { + for (int row = 0; row < H; row++) { + for (int col = 0; col < W; col++) { + rawData[row][3*col+0] = MAX (src->data[row][3*col+0]+ri->get_black() - riDark->data[row][3*col+0], 0); + rawData[row][3*col+1] = MAX (src->data[row][3*col+1]+ri->get_black() - riDark->data[row][3*col+1], 0); + rawData[row][3*col+2] = MAX (src->data[row][3*col+2]+ri->get_black() - riDark->data[row][3*col+2], 0); + } + } + } else { + for (int row = 0; row < H; row++) { + for (int col = 0; col < W; col++) { + rawData[row][3*col+0] = src->data[row][3*col+0]; + rawData[row][3*col+1] = src->data[row][3*col+1]; + rawData[row][3*col+2] = src->data[row][3*col+2]; + } + } } } }