2017-08-24 18 views
0

BitmapImageをbyte []で変換する必要がありますが、C#webでBitmapImageを行う方法が見つかりません。 例が見つかりましたが、どれも動作しません(JpegBitmapEncoderは存在しません。BitmapImageObject.StreamSourceは存在せず、パラメータとしてBitmapImageを持つWriteableBitmapコンストラクタがなく、Extensions.SaveJpeg(パラメータ)が存在しません... )。私が見つけたBitmapImage to byte [] - C#web

例:

コンストラクタ新しいWriteableBitmap(のBitmapImage)が存在しません。

public static byte[] ConvertToBytes(this BitmapImage bitmapImage) 
{ 
    byte[] data; 
    // Get an Image Stream 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     WriteableBitmap btmMap = new WriteableBitmap(bitmapImage); 

     // write an image into the stream 
     Extensions.SaveJpeg(btmMap, ms, 
      bitmapImage.PixelWidth, bitmapImage.PixelHeight, 0, 100); 

     // reset the stream pointer to the beginning 
     ms.Seek(0, 0); 
     //read the stream into a byte array 
     data = new byte[ms.Length]; 
     ms.Read(data, 0, data.Length); 
    } 
    //data now holds the bytes of the image 
    return data; 
} 

新しいWriteableBitmap(IMG)System.Windows.Media.Imaging.Extensions.SaveJpegは存在しません。

public static byte[] ImageToBytes(BitmapImage img) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     WriteableBitmap btmMap = new WriteableBitmap(img); 
     System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, img.PixelWidth, img.PixelHeight, 0, 100); 
     img = null; 
     return ms.ToArray(); 
    } 
} 

imageSource.StreamSource

は存在しません。
public static byte[] ImageToByte(BitmapImage imageSource) 
{ 
    Stream stream = imageSource.StreamSource; 
    Byte[] buffer = null; 
    if (stream != null && stream.Length > 0) 
    { 
     using (BinaryReader br = new BinaryReader(stream)) 
     { 
      buffer = br.ReadBytes((Int32)stream.Length); 
     } 
    } 

    return buffer; 
} 

JpegBitmapEncoder

は存在しません。

byte[] data; 
JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
encoder.Frames.Add(BitmapFrame.Create(bitmapImage)); 
using(MemoryStream ms = new MemoryStream()) 
{ 
    encoder.Save(ms); 
    data = ms.ToArray(); 
} 
+0

外部ライブラリをリンクする必要があるようです。それについて読むと、後でこの問題を解決できるかもしれません。 –

+0

githubにコードを共有できますか? –

答えて

0

を試してみて、明らかに、それはいくつかのライブラリを逃したが、我々は我々のアプリケーションに限定されているので、我々が回復することを決めた、ということらしいです私たちの写真は別の方法で。とにかく、ありがとうございました。

1

コードの先頭にある名前空間にusing statementと入力してください。 そうでなければ、目的を達成するためにインストールできるいくつかのNugetパッケージが必要です。 Main方法

Image img = Image.FromFile("path to the file"); 
var byteArray = ImageToByte(img); 

public static byte[] ImageToByte(Image img) 
{ 
    ImageConverter converter = new ImageConverter(); 
    return (byte[])converter.ConvertTo(img, typeof(byte[])); 
} 
1
byte[] foo = System.IO.File.ReadAllBytes("bitmap path"); 

または

byte[] foo; 
Object obj = YourBitmap; 
BinaryFormatter bf = new BinaryFormatter(); 
using (var ms = new MemoryStream()) 
{ 
    bf.Serialize(ms, obj); 
    foo = ms.ToArray(); 
} 

または

ImageConverter foocon = new ImageConverter(); 
byte[] foo = (byte[])foocon.ConvertTo(YourBitmap, typeof(byte[])); 

またはで

using System.Drawing; 
MemoryStream ms = new MemoryStream(); 
Bitmap.Save(ms, YourBitmap.RawFormat); 
byte[] foo = ms.ToArray(); 
0

私はこれが役立つと思います。この ...最後に

public byte[] ConvertBitMapToByteArray(Bitmap bitmap) 
{ 
    byte[] result = null; 
    if (bitmap != null) 
    { 
    MemoryStream stream = new MemoryStream(); 
    bitmap.Save(stream, bitmap.RawFormat); 
    result = stream.ToArray(); 
    } 
return result; 
}