【Qt】解决GDAL直接读取数据到QImage导致图像歪斜的问题
QRect intersect_rect;
....
QImage img(intersect_rect.size(), QImage::Format_RGB888);
uchar *pImageData = (unsigned char *)img.constBits();
int img_width = intersect_rect.width();
int img_height = intersect_rect.height();
// QImage每行是按照sizeof(int)对齐的,如果在RasterIO时不指定最后一个参数,即行字节数,则图像会歪斜。
int qimg_line_space = ceil((nRastercount * img_width) * 1.0 / sizeof(int)) * sizeof(int);
GDALRasterBand* pBand = m_poDataset->GetRasterBand(i);
pBand->RasterIO(
GF_Read,
intersect_rect.x(), intersect_rect.y(),
sub_img_width, sub_img_height,
pImageOffset,
sub_img_width, sub_img_height,
GDT_Byte,
nRastercount,
qimg_line_space); // 最后一个参数为0,会歪斜
原因是:QImage每行是按照sizeof(int)对齐的,如果在RasterIO时不明确指定最后一个参数,即行字节数,则图像会歪斜。
歪斜效果:
纠正后效果:
本文来自博客园,作者:撬动未来的支点,转载请注明原文链接:https://www.cnblogs.com/pivotfuture/p/16297369.html
CSDN:撬动未来的支点,公众号:Qt未来工程师,网站:www.qtfuture.cn