大家好,我有一个map_server读取PGM文件,但在QImage上打印出翻转的图像。 这是我的代码。
int width = msg->info.width;
int height = msg->info.height;
const std::vector<int8_t>& data (msg->data);
unsigned char *p, *q;
if( mapImage == NULL ) {
lineImage = new unsigned char[ width * 3 ];
mapImage = new QImage( width, height, QImage::Format_RGB888 );
}
if( mapImage != NULL ) {
for( int i = 0; i < height; i++ ) {
q = lineImage;
p = ( unsigned char * )&data[ i * width ];
for( int j = 0; j < width; j++ ) {
*q++ = *p;
*q++ = *p;
*q++ = *p;
p++;
}
memcpy( mapImage->scanLine( i ), lineImage, width * 3 );
}
}
printf( "Map received!\n" );
高度的“for循环”从“0”到极限(高度),我可以假设它在极限中读取的图片,直到“0”。
由于声誉,我无法提供图片。但我仍然希望我能在这方面获得一些帮助......
谢谢!
JeremyEthanKoh。
答案 0 :(得分:1)
当在JPG和BMP之间进行转换时,扫描线在Y中反转。这特定于BMP格式。您的QImage似乎是一个RGB 24位位图,您可以直接逐行写入其像素图。只需反转Y中的扫描线:
if( mapImage != NULL ) {
for( int i = 0; i < height; i++ ) {
q = lineImage;
p = ( unsigned char * )&data[ i * width ];
for( int j = 0; j < width; j++ ) {
*q++ = *p;
*q++ = *p;
*q++ = *p;
p++;
}
memcpy( mapImage->scanLine( height-i-1 ), lineImage, width * 3 );
}
}