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