summaryrefslogtreecommitdiffstats
path: root/src/gui/image
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-12-13 01:00:10 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-12-13 01:00:11 +0100
commitad4f359f805cdb1f1ed4745165090cccfcf11441 (patch)
treeb6526cb215f2d15fd312a48f70798459dd6051b3 /src/gui/image
parentd20c9805763ab3dc504ebf2cefd33499d89ef22c (diff)
parent69f6d3bd44e4e2d36ef741a1914227f804504141 (diff)
Merge remote-tracking branch 'origin/5.12' into dev
Diffstat (limited to 'src/gui/image')
-rw-r--r--src/gui/image/qpixmap_win.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/gui/image/qpixmap_win.cpp b/src/gui/image/qpixmap_win.cpp
index 68d204d76e..3a2db74098 100644
--- a/src/gui/image/qpixmap_win.cpp
+++ b/src/gui/image/qpixmap_win.cpp
@@ -422,8 +422,11 @@ static QImage imageFromWinHBITMAP_GetDiBits(HBITMAP bitmap, bool forceQuads, int
if (info.bmiHeader.biHeight > 0) // Force top-down
info.bmiHeader.biHeight = -info.bmiHeader.biHeight;
info.bmiHeader.biCompression = BI_RGB; // Extract using no compression (can be BI_BITFIELD)
- if (forceQuads)
+ size_t allocSize = info.bmiHeader.biSizeImage;
+ if (forceQuads) {
info.bmiHeader.biBitCount = 32;
+ allocSize = info.bmiHeader.biWidth * qAbs(info.bmiHeader.biHeight) * 4;
+ }
const QImage::Format imageFormat = imageFromWinHBITMAP_Format(info.bmiHeader, hbitmapFormat);
if (imageFormat == QImage::Format_Invalid) {
@@ -431,7 +434,7 @@ static QImage imageFromWinHBITMAP_GetDiBits(HBITMAP bitmap, bool forceQuads, int
return QImage();
}
- QScopedPointer<uchar> data(new uchar[info.bmiHeader.biSizeImage]);
+ QScopedArrayPointer<uchar> data(new uchar[allocSize]);
if (!GetDIBits(displayDc, bitmap, 0, qAbs(info.bmiHeader.biHeight), data.data(), &info, DIB_RGB_COLORS)) {
qErrnoWarning("%s: GetDIBits() failed to get data.", __FUNCTION__);
return QImage();