在我的那个程序里面,图片是可以实现对称翻转的,可是仔细想想的话,却发觉其实也没有什么用,不过也说一下实现的原理好了。
之前说过图片处理很多时候都是基于对图片每个像素里面的值进行处理,所以这次的图片翻转的效果也是通过这个原理的。
举个例子吧,如果想实现图片的左右翻转的话,
/// <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来把处理后的图片给显示出来啦!