none
实时特效照相程序的实现思路 RRS feed

  • 问题

  • 看到iphone上各种特效相机,自己也想模仿一个,查了下相关资料得知:WP 7.1已经支持自定义照相程序(PhotoCamera类),而且提供了相应的接口来获取相机预览缓冲区的数据帧,MSDN上如何在 Windows Phone 的相机应用程序中使用灰度 的例子也实现了一个灰度滤镜的简单Demo,为我们提供了一些思路,但是例子中显示实时灰度效果是通过WriteBitmap来实现的,经测试后发现效率低下,卡顿现象十分明显,就想提高效率,经同事提醒,既然wp支持direct3d,能否试一下d3d的纹理贴图,通过GPU来绘制,这样效率肯定比之前那种方式高,但是 作为XNA小白,不是很明白,搜索无果特来此发帖求助,还望各位前辈、同仁指点一二,在此谢过
    PS:如果有更高效的位图绘制方式,还请不吝赐教
    突然还想到一个问题,如何实现拍出来的照片是当前特效呢???
    再次感谢!
    2012年7月22日 15:26

答案

  • 你好,

    目前似乎没有更好的颁发。关于"如何实现拍出来的照片是当前特效",可以在拍摄结束后获取照片的数据然后获取ImageStream然后用 PictureDecoder.DecodeJpeg把ImageStream转换为WriteableBitmap,之后修改WriteableBitmap 并保存修改后的照片。


    Allen Chen [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年7月24日 3:05
  • 非常感谢您的回答,现在已经实现拍出来的照片是当前特效了,我的思路是这样的,提取缓冲区的数据副本,然后拍照结束后,把加工处理后的数据写入一个位图即可。
    //CameraBuffer为处理后的缓冲区数据帧副本
    
    WriteableBitmap wb = new WriteableBitmap((int)Camera.PreviewResolution.Width, (int)Camera.PreviewResolution.Height);
    Array.Copy(CameraBuffer, wb.Pixels, CameraBuffer.Length);
    Extensions.SaveJpeg(wb, isoFileStream, wb.PixelWidth, wb.PixelHeight, 0, 100);

    2012年7月24日 8:59

全部回复

  • 你好,

    目前似乎没有更好的颁发。关于"如何实现拍出来的照片是当前特效",可以在拍摄结束后获取照片的数据然后获取ImageStream然后用 PictureDecoder.DecodeJpeg把ImageStream转换为WriteableBitmap,之后修改WriteableBitmap 并保存修改后的照片。


    Allen Chen [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年7月24日 3:05
  • 非常感谢您的回答,现在已经实现拍出来的照片是当前特效了,我的思路是这样的,提取缓冲区的数据副本,然后拍照结束后,把加工处理后的数据写入一个位图即可。
    //CameraBuffer为处理后的缓冲区数据帧副本
    
    WriteableBitmap wb = new WriteableBitmap((int)Camera.PreviewResolution.Width, (int)Camera.PreviewResolution.Height);
    Array.Copy(CameraBuffer, wb.Pixels, CameraBuffer.Length);
    Extensions.SaveJpeg(wb, isoFileStream, wb.PixelWidth, wb.PixelHeight, 0, 100);

    2012年7月24日 8:59