2012-10-30 189 views
0

我得到了翻转的问题,因为只显示了右侧部分,其余的图片只有灰色。水平翻转图像C++

![Lena FLipped][1]  

Image *im2 = new Image(); 
im2->CloneImage(image); 

unsigned int sizeX = im2->GetSizeX(); 
unsigned int sizeY = im2->GetSizeY(); 

for(int x = 0; x < sizeX/2;x++){ 
    for(int y = 0;y < sizeY;y++){ 

     Image::PixelType pix = im2->GetPixel(x,y); 
     im2->SetPixel(x,y,sizeX-x-1); 
     im2->SetPixel(sizeX-x-1,y,pix); 
    } 
} 
ImageIO::Write("flip.pgm", im2); 
+0

im2-> SetPixel(X,Y,SIZEX-X-1);似乎是造成这个问题,它应该设置与像素值(sizeX-x-1,y) –

回答

0

您将需要执行两个像素的充分交流,而不是仅仅覆盖值 - 灰色从该行未来:

im2->SetPixel(x,y,sizeX-x-1); 

如果你提供两个X坐标,并且没有像素值。更正循环:

for(int x = 0; x < sizeX/2;x++){ 
    for(int y = 0;y < sizeY;y++){ 

     Image::PixelType pix = im2->GetPixel(x,y); 
     im2->SetPixel(x,y,im2->GetPixel(sizeX-x-1,y)); 
     im2->SetPixel(sizeX-x-1,y,pix); 
    } 
} 
+1

另一半也正在处理,虽然 –

+0

@mots_g不正确:干杯,我意识到一半发生了什么和忘了改变第一位。 –

0

你在这些线路做:

Image::PixelType pix = im2->GetPixel(x,y); 
    im2->SetPixel(x,y,sizeX-x-1); 
    im2->SetPixel(sizeX-x-1,y,pix); 

你应该记住两个像素值,然后交换他们。将像素设置为sizeX - x - 1的想法是什么?

1
im2->SetPixel(x,y,sizeX-x-1); 

是错误的,则需要设置的颜色来代替:

Image::PixelType pix1 = im2->GetPixel(x,y); 
Image::PixelType pix2 = im2->GetPixel(sizeX-x-1,y); 
im2->SetPixel(x,y,pix2); 
im2->SetPixel(sizeX-x-1,y,pix1); 
+0

为什么颜色? – Xeno1987

+0

好吧,严格来说不是颜色而是像素值。无论如何,你的代码提供了一个X坐标作为SetPixel的第三个参数,这似乎是错误的:SetPixel想要PixelType作为第三个参数(因此是像素值而不是坐标)。 – Vlad

+0

我们从我们的教授那里得到这部分。它的作品,但只有一半的图像翻转 – Xeno1987