|
分類:[C#]
ネットワークストリームから取得したbyte配列をbitmap形式に変換しようとしているのですが、どうにもうまくいきません。 bitmap形式に変換した後、データファイルとして保存してみると、真っ黒な背景に少しノイズがかったような絵になっていました。 パラメータに問題があるのかと思いPixelFormatを変更したりしてみたのですが、やはりうまくいきませんでした。
public byte [] ReceiveBinary(int size) { byte[] buf = new byte[1024]; int read = 0; int cnt = 0;
NetworkStream ns = client.GetStream();
using (MemoryStream ms = new MemoryStream()) { while ((read = ns.Read(buf, 0, buf.Length)) != 0) { ms.Write(buf, 0, read); cnt += read;
if (cnt >= size) break; }
Bitmap bmp = new Bitmap(1280, 800, PixelFormat.Format24bppRgb);
BitmapData bd = bmp.LockBits( new Rectangle(0, 0, 1280, 800), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
Marshal.Copy(ms.ToArray(), 0, bd.Scan0, ms.ToArray().Length);
bmp.UnlockBits(bd);
bmp.Save("C:\\test.bmp");
return ms.ToArray(); }
}
ストリームから取得したbyte配列の中身がおかしいのかと疑ってみたのですが、下記のようにImageConverterを使用したところ正しく画像表示できました。 なので、byte配列の中身は問題ないと考えています。
public byte [] ReceiveBinary(int size) { byte[] buf = new byte[1024]; int read = 0; int cnt = 0;
NetworkStream ns = client.GetStream();
using (MemoryStream ms = new MemoryStream()) { while ((read = ns.Read(buf, 0, buf.Length)) != 0) { ms.Write(buf, 0, read); cnt += read;
if (cnt >= size) break; }
ImageConverter imgconv = new ImageConverter(); ((Image)imgconv.ConvertFrom(ms.ToArray())).Save("C:\\test.bmp");
return ms.ToArray(); }
}
お気づきの点ありましたら、ご指摘頂きたいです。
|