0

これを介してPictureHubから画像をロードしようとしています...

void photoChooser_Completed(object sender, PhotoResult e)
    {           
        try
        {
            var imageVar = new BitmapImage();
            imageVar.SetSource(e.ChosenPhoto);           
            var b = new WriteableBitmap(imageVar.PixelWidth, imageVar.PixelHeight);
            b.LoadJpeg(toStream(imageVar));//here comes the exception
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }


    }

Stream toStream(BitmapImage img) 
    {
        WriteableBitmap bmp = new WriteableBitmap((BitmapSource)img);

        using (MemoryStream stream = new MemoryStream())
        {

            bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
            return stream;
        }
    }

isolotedstorageへのアクセス時にエラーが発生しました。助けてください !

4

3 に答える 3

1

私が正しく理解している場合、あなたは次のことを試みています:

  1. セレクターから画像を取得(ストリーム)
  2. ビットマップオブジェクトを作成する
  3. 別のストリームに書き込む
  4. その2番目のストリームからWriteableBitmapを作成します

これは非常に複雑です。あなたがしなければならないのはこれだけです:

var imageVar = new BitmapImage();
imageVar.SetSource(e.ChosenPhoto);           
var b = new WriteableBitmap(imageVar.PixelWidth, imageVar.PixelHeight);
b.SetSource(e.ChosenPhoto);

これで写真が表示されますが、最初にSetSourceメソッドを使用してBitmapImageを作成すると、写真のサイズが2000x2000未満に制限されることに注意してください。そうすると、WriteableBitmapもその小さく、縮小されたサイズになります。

LoadJpegメソッドを使用してフルサイズのWriteableBitmapを作成する場合は、次のようにする必要があります。

//DO SOMETHING TO GET THE PIXEL WIDTH AND PIXEL HEIGHT OF PICTURE BASED JUST ON THE STREAM, FOR EXAMPLE USE EXIF READER: http://igrali.com/2011/11/01/reading-and-displaying-exif-photo-data-on-windows-phone/ OR SEE MORE ABOUT LOADING A LARGE PHOTO HERE: http://igrali.com/2012/01/03/how-to-open-and-work-with-large-photos-on-windows-phone/          
var b = new WriteableBitmap(PixelWidth, PixelHeight);
b.LoadJpeg(e.ChosenPhoto);

フルサイズのJPEGが読み込まれます。

于 2012-07-12T13:35:54.907 に答える
0

画像を取得した後に実行する内容を指定しませんでした。アプリに画像を表示するだけの場合は、次のコードに従います。

tryブロックに、これを追加するだけです

var imageVar = new BitmapImage();
imageVar.SetSource(e.ChosenPhoto);
Image img = new Image();
img.Source = imageVar;
this.ContentPanel.Children.Add(img);
于 2012-07-12T12:17:01.310 に答える
0

使用したコードは問題ないようです。

void photoChooser_Completed(object sender, PhotoResult e)
{           
    try
    {
        var imageVar = new BitmapImage();
        imageVar.SetSource(e.ChosenPhoto);           
        var b = new WriteableBitmap(imageVar.PixelWidth, imageVar.PixelHeight);
        b.LoadJpeg(toStream(imageVar));//here comes the exception
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }


}

Stream toStream(BitmapImage img){WriteableBitmap bmp = new WriteableBitmap((BitmapSource)img);

    using (MemoryStream stream = new MemoryStream())
    {

        bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
        return stream;
    }
}

USBを再接続してみてください!

于 2013-05-31T05:05:31.157 に答える