2013-08-30 53 views
3

讀取圖像那麼,我基本上是試圖做的是從URL(PNG,JPG等)讀取任何類型的圖像,並能夠得到其純粹的像素數據。到目前爲止,我有這個代碼。下載和從URL

public static async Task<BitmapImage> DownloadImageFromWebsiteAsync(string url) 
    { 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
      using (WebResponse response = await request.GetResponseAsync()) 
      { 
       Stream imageStream = response.GetResponseStream(); 

       using (var result = new MemoryStream()) 
       { 
        await imageStream.CopyToAsync(result); 
        byte[] array = result.ToArray(); 
        return await ByteArrayToBitmapImage(array); 
       } 

      } 
     } 
     catch (WebException ex) 
     { 
      Debug.WriteLine(ex.Message); 
      return null; 
     } 
    } 

    private static async Task<BitmapImage> ByteArrayToBitmapImage(byte[] byteArray) 
    { 
     var bitmapImage = new BitmapImage(); 

     var stream = new InMemoryRandomAccessStream(); 
     await stream.WriteAsync(byteArray.AsBuffer()); 
     stream.Seek(0); 

     bitmapImage.SetSource(stream); 

     return bitmapImage; 
    } 

由於像jpeg這樣的編碼,獲取純字節[]作爲像素不起作用。我想知道是他們的任何方式來從URL下載圖像,對其進行解碼,並獲取像素緩衝區。非常感謝幫助。謝謝。

回答

2

試試這個。您需要手動添加using System.Runtime.InteropServices.WindowsRuntime;

private async Task<byte[]> GetBytesFromImage(string URL) 
{ 
    byte[] srcPixels; 
    var uri = new Uri(URL); 
    var streamRef = RandomAccessStreamReference.CreateFromUri(uri); 

    using (IRandomAccessStreamWithContentType fileStream = await streamRef.OpenReadAsync()) 
    { 
     BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream); 
     PixelDataProvider pixelProvider = await decoder.GetPixelDataAsync(); 
     srcPixels = pixelProvider.DetachPixelData(); 
    } 

    return srcPixels; 
} 
+0

謝謝!這非常有幫助。很好的答案! –

+0

歡迎您:) – Xyroid