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
この回答への補足
いろいろ調べたところ以下の方法で、Image型へ格納したときの情報(解像度など)を
損なうことなく取り出すことができました。
Dim im As Image
im = Image.FromFile("D:\Image1.jpg")
Im.Save("D:\Image2.jpg")
お騒がせしました。
ありがとうございました。
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
この回答への補足
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 オブジェクト。
**************************************************************************************************
thulala 様
いろいろとご親切にありがとうございました。
何とお礼を言って良いか言葉が見つかりません。
bmp.Saveのパラメータには、画像フォーマットを指定できたのですね。
オブジェクトブラウザで見るとファイル名以外に指定できるパラメータが
あるように見えなかったため、目から鱗でした。
それから保存したファイルの解像度が72dpiから96dpiに変換されていましたが
画像のサイズや見た目がオリジナルと同じだったことに驚きました。
実は、このあと取り出した画像ファイルのサイズ(WidthやHeight)をピクセルから
ポイントへ変換して計算を行うのですが、このような計算を行うためには、
解像度を考慮するものだと思っていましたが、認識が違っていたかも知れません。
しかしここまでくれば何とかなりそうです。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
【エクセルのマクロ】クリップ...
-
アクセスVBAのMe!と[ ]
-
Accessのフォーム上にエクセル...
-
VBA:ホームページ内のデータテ...
-
VBAで選択範囲外の図形(オブジ...
-
日本語の文字化けを直す方法
-
PictureBoxにPSetしてそれをIma...
-
Access からオブジェクトとして...
-
エクセルのデータをwebフォーム...
-
SQLの更新の時、記号 ’ について
-
VB.NET Image型データをファイ...
-
Excel2007 でのチェックボック...
-
ExcelのシートをAccessで表示し...
-
エクセルVBAでセル番地を指定し...
-
現在アクティブになっているオ...
-
Doevents をご教授ください。
-
ADODB.Streamを使って新規にフ...
-
Excel VBAでマウスの左クリック...
-
カタカナ&数字だけを消したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
文字列で小数点以下の0を削除し...
-
Excel VBAでマウスの左クリック...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Accessのフォーム上にエクセル...
-
コードでオブジェクトを最前面に
-
日本語の文字化けを直す方法
-
現在アクティブになっているオ...
-
Imageコントロールにグラフを表...
-
Excel2007 でのチェックボック...
-
PowerpointVBAで指定のShapeオ...
-
Access からオブジェクトとして...
-
エクセルのデータをwebフォーム...
-
【エクセル】複数のTextBoxに共...
-
[C#] DataGridViewの項目名
-
カッコ付けのオブジェクト名を...
-
ExcelのシートをAccessで表示し...
-
構造体の静的な初期化
おすすめ情報