C# 画像データ(jpg/bmp/png) を読み込んで png形式のbypte配列にしたい

[戻る]
なおぞう 2016/07/22(金) 15:54:41
お世話になります。
C# VS2010で開発しております。

やりたいことは、ファイル選択ダイアログで選んだ画像データ(jpg,bmp,pngなど)をpng
形式のbyte配列にして、DBに格納、利用(印刷)する。です。

image1.Save(@"C:\test.png", System.Drawing.Imaging.ImageFormat.Png); というよう
に、ファイルをセーブする際にファイル形式を変える方法は見つけたのですが、データ上
でpngにする方法が分かりません。
 
現状では、以下のようなテストコードを作成しています。
----------------------------------------------------------
string fname =openFileDialog1.FileName  ←jpgファイルを指定

//画像を読み込む
FileStream stream = new FileStream( fname, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(stream);
↑この書き方だと、jpg形式のバイナリですよね。ここで、読み込んだjpgデータをpng形式
にする方法を調べているのですが見つからなくて困っています。       

//バイト配列にする
byte[] photo = null ;   ←この変な書き方はわざとです
photo = new byte[] { };  ←この変な書き方はわざとです
photo = reader.ReadBytes((int)stream.Length);

reader.Close();//クローズ
stream.Close();//クローズ


ImageConverter imgconv = new ImageConverter();
Image img = (Image)imgconv.ConvertFrom(photo);//バイト配列をイメージに変更する

//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(pictureBox2.Width, pictureBox2.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics g = Graphics.FromImage(canvas);

//画像をcanvasの座標(0, 0)の位置に描画する
g.DrawImage(img, 0, 0, pictureBox2.Width, pictureBox2.Height);
//Imageオブジェクトのリソースを解放する
img.Dispose();

//Graphicsオブジェクトのリソースを解放する
g.Dispose();
//画像の変換ができてるか確認。pictureBox2に表示してみる
pictureBox2.Image = canvas;

----------------------------------------

以上、よろしくお願いします。

YuO [E-Mail] 2016/07/24(日) 03:09:00
Bitmap.SaveでMemoryStreamに書き出して,
DBへはMemoryStream.ToArray()を出力すればよいのではないでしょうか。

なおぞう 2016/07/25(月) 21:52:44
>YuO様
ご返答ありがとうございます。
画像データの扱いを後回しにしてちょっと簡単なところから手を付け始めています。
アドバイス、参考にさせていただきます。

aetos 2016/08/02(火) 11:47:58
BinaryReader も ImageConverter も要らなそうですね。
パスを指定して Bitmap に読み込んで、Bitmap.Save で MemoryStream に書き出しでいい
と思います。

なおぞう 2016/08/02(火) 20:00:15
[[解決]]
>aetos さま

書き込みありがとうございます。
結局、同僚が作ってくれました…。
ソースを見たのですがなんだか複雑でよく分からなかったです。

また何かありましたらよろしくお願い致します。

古いスレッドには追加発言できません。