dポイントプレゼントキャンペーン実施中!

次のようなコーディングでImage型へ格納した
データをファイルとして取り出す方法が解りません。

Dim img As Image

img = Image.FromFile("C:\pic01.jpg")


具体的には、"C:\pic02.jpg" というように名前を
付けて保存したいのですが、可能でしょうか?

A 回答 (2件)

以下のよう感じでできます。


雑なコードですが、、、
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

この回答への補足

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. …


上記のうち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 オブジェクト。

**************************************************************************************************

補足日時:2004/08/14 12:39
    • good
    • 0
この回答へのお礼

thulala 様

いろいろとご親切にありがとうございました。
何とお礼を言って良いか言葉が見つかりません。

bmp.Saveのパラメータには、画像フォーマットを指定できたのですね。
オブジェクトブラウザで見るとファイル名以外に指定できるパラメータが
あるように見えなかったため、目から鱗でした。

それから保存したファイルの解像度が72dpiから96dpiに変換されていましたが
画像のサイズや見た目がオリジナルと同じだったことに驚きました。

実は、このあと取り出した画像ファイルのサイズ(WidthやHeight)をピクセルから
ポイントへ変換して計算を行うのですが、このような計算を行うためには、
解像度を考慮するものだと思っていましたが、認識が違っていたかも知れません。

しかしここまでくれば何とかなりそうです。

本当にありがとうございました。

お礼日時:2004/08/17 00:29

及ばずながらの知識ですみませんが、、、


たぶんこんな感じではないでしょうか?
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

この回答への補足

いろいろ調べたところ以下の方法で、Image型へ格納したときの情報(解像度など)を
損なうことなく取り出すことができました。


Dim im As Image
im = Image.FromFile("D:\Image1.jpg")

Im.Save("D:\Image2.jpg")

お騒がせしました。
ありがとうございました。

補足日時:2004/08/30 09:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!