2010-04-15 82 views
0

http://tinypic.com/r/fwubzc/5正確翻轉/鏡像像素的圖像?

這顯示了翻轉應該是什麼以及鏡子應該是什麼。

代碼爲兩種類型的鏡子:

void mirrorLeftRight() 
{ 
    for (int x = 0; x < width/2; x++) { 
      for (int y = 0; y < height; y++) { 
       int temp = pixelData[x][y]; 
       pixelData[x][y]=pixelData[width-x][y] 
       pixelData[width-x][y]=temp; 
      } 
    } 
} 

void mirrorUpDown() 
{ 
    for (int x = 0; x < width; x++) { 
      for (int y = 0; y < height/2; y++) { 
       int temp = pixelData[x][y]; 
       pixelData[x][y]=pixelData[x][height-y] 
       pixelData[x][height-y]=temp; 
      } 
    } 
} 

這個問題似乎正確的鏡子?

而對於翻轉,只需使用widthheight而不用2除?

+1

如果發生什麼'height'甚至不是? – 2010-04-15 17:07:50

+0

剛剛意識到我在使用'int temp'的時候我應該使用Color temp,因爲pixelData是Color類的 – codefail 2010-04-15 17:33:49

+1

jeff - 當它的高度是偶數時,整數除法返回高度的一半,一切都很好。你不必翻轉中間的列/行,因爲它已經在正確的位置。 – miked 2010-04-15 20:55:14

回答

0

上面的代碼看起來更像是正確的翻轉方式,而不是鏡像。

鏡像我猜你不會切換像素,而是從一側複製到另一側。

帶鏡子我猜想,你需要改變

int temp = pixelData[x][y]; 
pixelData[x][y]=pixelData[width-x][y] 
pixelData[width-x][y]=temp; 

到這樣的事情只有

pixelData[x][y]=pixelData[width-x][y] 
3

您需要使用width-1-x而不是width-xheight-1-y而不是height-y。否則,對於x == 0,您將嘗試索引[width],它位於數組之外。

2

它不應該工作,因爲你是交換像素,而你只需要用左側部分覆蓋圖像的右側部分。同樣的事情適用於mirrorUpDown

如果你交換它們,你會得到一個翻蓋,如果你覆蓋它們,你會得到一面鏡子。

  • mirrorLeftRight:從左半採取的像素,並用它們覆蓋右側部分
  • mirrorUpDown:採取從上部像素,並用它們覆蓋下一個
  • 翻轉:在這種情況下,你不會覆蓋但你交換像素(在這種情況下來源的一半是不影響的)
+0

所以我的例子是翻轉,而不是鏡子。 爲了使該代碼成爲鏡像,我該如何改變? – codefail 2010-04-15 17:13:05

+0

因爲它是功課,你應該嘗試弄清楚自己:)我已經給你足夠的提示.. – Jack 2010-04-15 17:14:32