在做摄像头图像采集时遇到了一个问题,采集到的图像反转了,结果采集到的图像就好比我们在照镜子,跟现实世界的方向是完全相反的,显示人或场景的时候还没发现啥奇怪的,可能平时看镜子多了,但显示字的时候就发现问题了,显示出来的字完全反了,根本无法看,为解决这个问题,必须想办法将采集到的图像进行180度反转,查了资料后发现了ImageBrush的TileMode属性,该属性可以设置图像的铺设方式,利用它可以实现图像的反转,该属性有以下枚举值:
None //默认值,不做啥操作
FlipX //水平方向上反转
FlipY //垂直方向上反转
FlipXY //水平方向上和垂直方向上反转
Tile //不反转,但会平铺填充
因此,为实现将图像反转,我设置了TileMode为FlipY,垂直方向上做反转,然而,实验中发现设置了TileMode属性后,根本没啥效果,原来设置TileMode属性并不是对显示出来的图像做反转,通过设置ImageBrush的Viewport为new Rect(0, 0, 0.5, 0.5)后可以发现,设置TileMode属性是对图像铺设时做反转的效果,默认左上角为原图像,然后其周围的图像为反转后的效果,这意味着原图像还是会被显示出来,为解决该问题,我做了以下操作,设置ImageBrush的Transform为new RotateTransform(90),Viewport为new Rect(0, 0, 1, 1)这时候显示出来的是反转后的图像,原图像实际上位于右边,但被挡住看不到了,这样子显示出来的图像便是正确方向的图像了,现在只剩下一个问题,显示出的图像被转了90度,解决方案很简单,对显示ImageBrush的控件做一个反方向的90度旋转,于是终于实现了对采集到的图像做反转的最终目的。
核心代码如下:
Canvas video = new Canvas();
ImageBrush ib= new ImageBrush(采集到的图像);
ib.TileMode = TileMode.FlipY;
ib.Viewport = new Rect(0, 0, 1, 1);
ib.Transform = new RotateTransform(90);
video.Background = ib;
video.LayoutTransform = new RotateTransform(-90);