ExifLib需要可搜索的流

时间:2014-03-14 12:12:43

标签: c# windows-phone-8 exif bitmapimage exiflib

我在Windows Phone 8 C#中实例化ExifReader时遇到错误。请在下面找到代码段。请做必要的

错误:“ExifLib需要可搜索的流”

byte[] imageBytes = (byte[])PhoneApplicationService.Current.State["ViewImage"];

MemoryStream ms = new MemoryStream(imageBytes,0,imageBytes.Length);

BitmapImage bitmapImage = new BitmapImage();

bitmapImage.SetSource(ms);

try
{
    ExifReader xif = new ExifReader(toStream(bitmapImage)); // Getting Error here
    double gpsLat, gpsLng;
    xif.GetTagValue<double>(ExifTags.GPSLatitude, out gpsLat);
    xif.GetTagValue<double>(ExifTags.GPSLongitude, out gpsLng);

    map.Center = new System.Device.Location.GeoCoordinate(gpsLat, gpsLng);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message.ToString());
}

Stream toStream(BitmapImage img)
{
    WriteableBitmap bmp = new WriteableBitmap((BitmapSource)img);
    using (MemoryStream stream = new MemoryStream())
    {
        bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
        stream.Position = 0;
        return stream;
    }
}

1 个答案:

答案 0 :(得分:0)

调用CanSeek时,MemoryStream返回false。这是因为您已将MemoryStream包裹在using语句中,这意味着您将返回已处置的对象。

您的toStream方法实际上应如下所示:

Stream ToStream(BitmapImage img)
{
    MemoryStream stream = new MemoryStream();
    using (WriteableBitmap bmp = new WriteableBitmap((BitmapSource)img))
    {
        bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
    }
    stream.Position = 0;
    return stream;
}