C# 如何在Silverlight中从网络摄像头翻转视频捕获
我注意到,当我在Silverlight视频中从网络摄像头捕获视频时,是“反向”的,意思是当我向右移动时,屏幕上的我向左移动。有什么方法可以翻转视频捕获吗?我可以左右翻转,这就是你可以做到的C# 如何在Silverlight中从网络摄像头翻转视频捕获,c#,silverlight,video,webcam,C#,Silverlight,Video,Webcam,我注意到,当我在Silverlight视频中从网络摄像头捕获视频时,是“反向”的,意思是当我向右移动时,屏幕上的我向左移动。有什么方法可以翻转视频捕获吗?我可以左右翻转,这就是你可以做到的 private WriteableBitmap flipVideo(WriteableBitmap notFliped) { WriteableBitmap motionBmp = new WriteableBitmap(notFliped.PixelWidth, notFliped.
private WriteableBitmap flipVideo(WriteableBitmap notFliped)
{
WriteableBitmap motionBmp = new WriteableBitmap(notFliped.PixelWidth, notFliped.PixelHeight);
int leftRight = -1;
int[] flipedArray = motionBmp.Pixels;
int[] currentArray = notFliped.Pixels;
for (int h = 0; h < 480; h++)
{
leftRight++;
for (int w = 0; w < 640; w++)
{
flipedArray[h * 640 + w] = currentArray[639 + (h * 640) - w];
}
}
return motionBmp;
}
private WriteableBitmap flipVideo(WriteableBitmap NotFlipped)
{
WriteableBitmap运动BMP=新的WriteableBitmap(NotFlipped.PixelWidth,NotFlipped.PixelHeight);
int leftRight=-1;
int[]flipedArray=motionBmp.Pixels;
int[]currentArray=notFliped.Pixels;
对于(int h=0;h<480;h++)
{
leftRight++;
对于(int w=0;w<640;w++)
{
翻转阵列[h*640+w]=当前阵列[639+(h*640)-w];
}
}
返回运动;
}
请注意,640和480是相机分辨率,请根据您的值调整它们。我不知道网络摄像头是否默认支持任何其他分辨率。但如果是640*480,则可以按原样使用此代码。此外,您还需要了解,即使一个cam框架在像素((3x3)图片)中看起来像这样
0,1,2。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
3,4,5......................................................................................
6,7,8
像素返回[]={0,1,2,3..8}
所以你需要把这些值一行一行地转换成这个值
2,1,0。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
5,4,3......................................................................................
8,7,6
以上代码就是这样做的。。
干杯..忽略这些点…我通过在Blend中打开项目翻转了一个矩形,选择了我的矩形->属性->变换->按Y翻转。我以前怎么没有看到它…(悲伤的长号)相机对还是你的对?相机对。基本上,它应该和照镜子一样,但现在正好相反,我想从我记忆中你需要画出相反的图像。我已经很久没有看Silverlight了,你知道怎么做吗?这看起来很有希望-谢谢你的努力,但我在下面找到了一个更简单的解决方案:)这就是如果你只使用Silverlight,你可以做的,我回答了你的Silverlight问题。。