在我的那個程序里面,圖片是可以實現對稱翻轉的,可是仔細想想的話,卻發覺其實也沒有什么用,不過也說一下實現的原理好了。
之前說過圖片處理很多時候都是基於對圖片每個像素里面的值進行處理,所以這次的圖片翻轉的效果也是通過這個原理的。
舉個例子吧,如果想實現圖片的左右翻轉的話,
/// <summary>
/// 將圖片進行翻轉處理
/// </summary>
/// <param name="mybm">原始圖片</param>
/// <param name="width">原始圖片的長度</param>
/// <param name="height">原始圖片的高度</param>
/// <returns>經過翻轉后的圖片</returns>
public Bitmap RevPic(Bitmap mybm, int width, int height)
{
Bitmap bm = new Bitmap(width, height);//初始化一個記錄經過處理后的圖片對象
int x, y, z;//x,y是循環次數,z是用來記錄像素點的x坐標的變化的
Color pixel;
for (y = height - 1; y >= 0; y--)
{
for (x = width - 1, z = 0; x >= 0; x--)
{
pixel = mybm.GetPixel(x, y);//獲取當前像素的值
bm.SetPixel(z++, y, Color.FromArgb(pixel.R, pixel.G, pixel.B));//繪圖
}
}
return bm;//返回經過翻轉后的圖片
}
具體的理解可能要通過畫圖,所以我這里就沒有做這一步,不過如果在草稿紙上面去理解一下是應該沒有問題的。
圖片有左右翻轉,當然也會有上下翻轉啦,其實原理是差不多的,實現的代碼如下,
public Bitmap RevPic(Bitmap mybm, int width, int height)
{
Bitmap bm = new Bitmap(width, height);
int x, y, z;
Color pixel;
for (x = 0; x < width; x++)
{
for (y = height - 1, z = 0; y >= 0; y--)
{
pixel = mybm.GetPixel(x, y);//獲取當前像素的值
bm.SetPixel(x, z++, Color.FromArgb(pixel.R, pixel.G, pixel.B));//繪圖
}
}
return bm;//返回翻轉后的圖片
}
至於上面這段實現“上下翻轉”的代碼的部分注釋就不寫了,我這個人比較懶,如果有些不明白的話可以看回“左右翻轉”那里的注釋,其實也是大同小異的。
最后當然也是要通過一個pictureBox來把處理后的圖片給顯示出來啦!