【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时不明确指定最后一个参数,即行字节数,则图像会歪斜。

歪斜效果:
在这里插入图片描述
纠正后效果:
在这里插入图片描述

posted @ 2022-05-22 11:22  撬动未来的支点  阅读(141)  评论(0编辑  收藏  举报