• 締切済み

VB.NET Image型データをファイルとして取り出したい

次のようなコーディングでImage型へ格納した データをファイルとして取り出す方法が解りません。 Dim img As Image img = Image.FromFile("C:\pic01.jpg") 具体的には、"C:\pic02.jpg" というように名前を 付けて保存したいのですが、可能でしょうか?

みんなの回答

  • thulala
  • ベストアンサー率63% (7/11)
回答No.2

及ばずながらの知識ですみませんが、、、 たぶんこんな感じではないでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim g As Graphics Dim sg As Graphics Dim dg As Graphics Dim im As Image Dim bmp As Bitmap im = Image.FromFile("D:\Image1.jpg") g = Me.CreateGraphics() g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic g.DrawImage(im, 0, 0, im.Width, im.Height) bmp = New Bitmap(im.Width, im.Height) sg = Graphics.FromImage(bmp) sg.DrawImage(im, 0, 0, im.Width, im.Height) bmp.Save("c:\hello.jpg", Imaging.ImageFormat.Jpeg) End Sub

yykasu
質問者

補足

いろいろ調べたところ以下の方法で、Image型へ格納したときの情報(解像度など)を 損なうことなく取り出すことができました。 Dim im As Image im = Image.FromFile("D:\Image1.jpg") Im.Save("D:\Image2.jpg") お騒がせしました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • thulala
  • ベストアンサー率63% (7/11)
回答No.1

以下のよう感じでできます。 雑なコードですが、、、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '1:フォーム描画用のグラフィックオブジェクトを作成 '2:セーブファイル描画用のグラフィックオブジェクトを作成 '3:空白のBitmapを作成→Imageと結びつける→グラフィックオブジェクトと結びつける '4:グラフィックオブジェクトで適当に描画する '5:Imageオブジェクトから保存する Dim g As Graphics Dim sg As Graphics Dim im As Image Dim Pen As New Pen(Color.Red) Dim bmp As New Bitmap(Me.Width, Me.Height) im = Image.FromFile("D:\0001.jpg") g = Me.CreateGraphics() g.DrawLine(Pen, 0, 0, 100, 100) g.DrawImage(im, 100, 100) sg = Graphics.FromImage(bmp) sg.DrawImage(im, 100, 100) sg.DrawLine(Pen, 0, 0, 100, 100) bmp.Save("hello.jpg") End Sub

yykasu
質問者

お礼

thulala 様 いろいろとご親切にありがとうございました。 何とお礼を言って良いか言葉が見つかりません。 bmp.Saveのパラメータには、画像フォーマットを指定できたのですね。 オブジェクトブラウザで見るとファイル名以外に指定できるパラメータが あるように見えなかったため、目から鱗でした。 それから保存したファイルの解像度が72dpiから96dpiに変換されていましたが 画像のサイズや見た目がオリジナルと同じだったことに驚きました。 実は、このあと取り出した画像ファイルのサイズ(WidthやHeight)をピクセルから ポイントへ変換して計算を行うのですが、このような計算を行うためには、 解像度を考慮するものだと思っていましたが、認識が違っていたかも知れません。 しかしここまでくれば何とかなりそうです。 本当にありがとうございました。

yykasu
質問者

補足

thulala 様 大変に参考になりました。ありがとうございました。 さっそく昨夜から自分でも色々と試してみました。 私の場合は、画像を加工する必要がないため、途中を省略して 以下のようなコードで良さそうなことがわかりました。 '************************************************ Dim g As Graphics Dim sg As Graphics Dim im As Image Dim bmp As Bitmap im = Image.FromFile("c:\001.jpg") g = Me.CreateGraphics() g.DrawImage(im, 0, 0) bmp = New Bitmap(im.Width, im.Height) sg = Graphics.FromImage(bmp) sg.DrawImage(im, 0, 0) bmp.Save("c:\hello.jpg") '************************************************ ところが保存した画像を確認してみると次のような問題がありました。 1.保存するときの拡張子に関わらず画像の形式がPNGになる。 2.上記1の問題によりファイルサイズが大きくなる。 3.ビットの深さが32ビットになる。 4.水平、垂直方向のピクセル数は、元の画像に合わせることができるが、   解像度が96dpiに変換されるため、例えば元の画像が72dpiである場合は、   拡大されて絵が欠落してしまう。 具体的には、以下のようになってしまいます。   ◆オリジナル画像   http://www.ats-japan.co.jp/~ykasugai/test/001.jpg   ◆保存画像   http://www.ats-japan.co.jp/~ykasugai/test/hello.jpg 上記のうち1~3は、許容範囲なのですが、4.の解像度が変更されてしまうのは 何とか解決したいと思って色々調べています。 ヘルプを見るとどうやらBitmapを作成するときの第3パラメータに解像度を 指定できるようなのですが、どれを指定すれば良いのかどうしてもわかりません。 bmp = New Bitmap(im.Width, im.Height, ?????) ちなみにヘルプには、こうあります。 ************************************************************************************************** Public Sub New(ByVal width As Integer, ByVal height As Integer, ByVal g As System.Drawing.Graphics) 次のメンバ : System.Drawing.Bitmap 概要 : 指定したサイズと指定した System.Drawing.Graphics オブジェクトの解像度を使用して、System.Drawing.Bitmap クラスの新しいインスタンスを初期化します。 パラメータ : width: 新しい System.Drawing.Bitmap オブジェクトの幅 (ピクセル単位)。 height: 新しい System.Drawing.Bitmap オブジェクトの高さ (ピクセル単位)。 g: 新しい System.Drawing.Bitmap オブジェクトの解像度を指定する System.Drawing.Graphics オブジェクト。 **************************************************************************************************

すると、全ての回答が全文表示されます。

関連するQ&A