Silverlight / ImageTools将Webcam Imagesource转换为Jpeg无法正常工作 [英] Silverlight/ImageTools to Convert Webcam Imagesource to Jpeg not working

查看:132
本文介绍了Silverlight / ImageTools将Webcam Imagesource转换为Jpeg无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个实用程序,允许用户拍摄相机照片并上传,以及上传文件的其他选项。除了我必须在上传之前将网络摄像头图像转换为jpg之外,我已经完成了大部分工作。下面的代码没有错误但产生无效的图像数据:

I have a utility that allows the user to take a camera photo and upload it, in addition to another option to upload a file. I've got most of it working, except for the part where I have to convert the webcam image to a jpg prior to upload. The code below has no error but produces invalid image data:

void CaptureImageCompleted(object sender, CaptureImageCompletedEventArgs e)
{
    busyIndicator.IsBusy = true;
    stopCapture();
    capturedImage.ImageSource = e.Result;

    ImageTools.ExtendedImage eimg = e.Result.ToImage();
    var encoder = new ImageTools.IO.Jpeg.JpegEncoder();

    Stream stream = eimg.ToStreamByExtension("jpg");

    //DO THIS LATER
    //if (stream.Length > 512000)
    //{
    //    eimg = ExtendedImage.Resize(eimg, 240, new NearestNeighborResizer());
    //    stream = eimg.ToStreamByExtension("jpg");
    //}

    encoder.Encode(eimg, stream);

    BitmapImage bitmap = new BitmapImage();
    bitmap.SetSource(stream);

    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, (int)stream.Length);

    // picture file a class object to be used by uploader
    pictureFile.PictureName = "webcam.jpg";  // name will be changed later
    pictureFile.PictureStream = bytes;


    HtmlPage.Window.Invoke("gotDetails_WebCam", "");  // post page, then come back and do upload
}

这是PictureFile的样子喜欢:

Here is what PictureFile looks like:

[DataContract]
public class PictureFile
{
    [DataMember]
    public string PictureName { get; set; }

    [DataMember]
    public byte[] PictureStream { get; set; }
}

任何人都可以弄清楚我做错了产生所需的字节数对于一个jpeg?

Can anyone figure out what I'm doing wrong to produce the bytes needed for a jpeg?

推荐答案

很高兴看到你解决了,

这是我的运行代码,
我使用png格式,还有文件大小检查。
也许它有助于s.one else。

here is my running code, I use png format,there is also file size check. Maybe it helps s.one else.

dSrvPR是我的域服务类实例

dSrvPR is my Domain Service Class instance

photo是我的EF中的实体对象。

photo is an entity object in my EF.

_captureSource.CaptureImageCompleted += ((s, args) =>
        {
            if (dSrvPR.PR_PATIENTPHOTOs.Count > 0 && photo != null)
            {
                dSrvPR.PR_PATIENTPHOTOs.Remove(photo);
            }

            dSrvPR.PR_PATIENTPHOTOs.Clear();

            photo = new PR_PATIENTPHOTO();

            ImageTools.ExtendedImage eimg=args.Result.ToImage();
            var encoder=new ImageTools.IO.Png.PngEncoder();                                 

            Stream stream= eimg.ToStreamByExtension("png");
            if (stream.Length > 512000)
            {                    
                eimg= ExtendedImage.Resize(eimg, 240, new NearestNeighborResizer());                    
                stream = eimg.ToStreamByExtension("png");
            }                     
            if (stream.Length <= 512001)
            {
                BinaryReader binary = new BinaryReader(stream);
                //Read bytes from the BinaryReader and put them into a byte array.
                Byte[] file = binary.ReadBytes((int)stream.Length);
                photo.ID = Guid.NewGuid();
                photo.PHOTO = file;
                photo.PHOTODATE = DateTime.Now;
                photo.ISACTIVE = true;
                //some more unrelated fields
                dSrvPR.PR_PATIENTPHOTOs.Add(photo);
                dSrvPR.SubmitChanges();
  //Msg succedded
            }
            else
            {
                Util.alert(...,"file size exceeded! :)";
            }

        });

这篇关于Silverlight / ImageTools将Webcam Imagesource转换为Jpeg无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆