開発環境 Vista, Access2007 です
初心者です。
次のようなことをフリー(シェア)ソフトなどを使わずに
実現させたいです。
【例】
画面の参照ボタンを押して、
AAというフォルダから画像(abc.jpg)を選択してフォームに表示
と同時に
表示されている画像(abc.jpg)をコピー縮小(例えば50パーセント)して
別フォルダABにファイル名をabc.jpgのまま保存
まったくの初心者です。
どなたか、実現できる方法があれば教えていただけないでしょうか?
よろしくお願いします。
'画像を読み込む
If OpenFileDialog1.ShowDialog( ) = Windows.Forms.DialogResult.OK Then
fname = OpenFileDialog1.FileName
詳しくは下記のページで調べてください。
http://dobon.net/vb/dotnet/graphics/index.html
面白そうなので作ってみましたが
上書き保存の時に「GDI+ で汎用エラーが発生しました。」とエラーがでます
ちなみに保存するときのファイルフォーマットはjpgに限定してます
Imports System.IO, System.Drawing, System.Text, System.Drawing.Imaging, System.Windows.Forms
Public Class Form1
Dim fname As String = ""
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fname As String = ""
OpenFileDialog1.Filter = "jpeg(*.jpg,*.jpg)|*.jpg;*.jpg|" + " ビットマップ(*.bmp)|*.bmp"
'ファイルを開くダイアログボックス
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
'ファイル名を取得
fname = OpenFileDialog1.FileName
'読み込み
PictureBox1.Image = Image.FromFile(fname)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SaveFileDialog1.Filter = "jpeg(*.jpg,*.jpg)|*.jpg;*.jpg|" + " ビットマップ(*.bmp)|*.bmp"
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
PictureBox1.Image.Save(OpenFileDialog1.FileName, ImageFormat.Jpeg)
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim img As Bitmap = New Bitmap(PictureBox1.Image)
'PictureBox1のGraphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'元の画像の大きさを0.5倍にして表示する
Dim rect As RectangleF = _
New RectangleF(0, 0, 0.5F * img.Width, 0.5F * img.Height)
g.DrawImage(img, rect)
'BitmapとGraphicsオブジェクトを破棄
img.Dispose()
g.Dispose()
End Sub
End Class
保存の部分のコードが間違えていたようなので書き直すと今度は
パスの形式が無効です。とでます。何かが間違ってる?
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim filename As String = ""
SaveFileDialog1.Filter = "jpeg(*.jpg,*.jpg)|*.jpg;*.jpg|" + " ビットマップ(*.bmp)|*.bmp"
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
SaveFileDialog1.FileName = filename
PictureBox1.Image.Save(SaveFileDialog1.FileName, ImageFormat.Jpeg)
End If
End Sub
そりゃ、
Dim filename As String = ""
なので、
SaveFileDialog1.FileName = filename
でSaveFileDialog1.FileNameは""になっているから、
PictureBox1.Image.Save("", ImageFormat.Jpeg)
を行っていることと同じなんじゃないの?
こうやってもエラーでます。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim filename As String = "c:\"
SaveFileDialog1.Filter = "jpeg(*.jpg,*.jpg)|*.jpg;*.jpg|" + " ビットマップ(*.bmp)|*.bmp"
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
SaveFileDialog1.FileName = filename
PictureBox1.Image.Save(SaveFileDialog1.FileName, ImageFormat.Jpeg)
End If
End Sub
VB.NETの回答が付いているようですが、AccessなのでVBAなのでは?
#Access2007はVB.NET?・・・じゃないですね。
ライブラリーなども使えないのであれば
GDI+のFlat APIを叩くくらいしかないんじゃないでしょうか。
一応過去ログありました。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200803/08030008.txt
蛇足かもしれませんが、OS が VISTA とのことなので、
一応 WIC(Windows Imaging Component)も使えるのかもしれません。
(IWICBitmapDecoderからIWICBitmapSourceに読み込み、IWICBitmapScalerでサイズ変換)
しかし VBA から使えるかどうかは分かりません。
あまり詳しくないのですがタイプライブラリーを書けば
VBA からでもアクセスできるのかもしれません。
回答頂いた皆さん、ありがとうございました。
参考に、やってみます。
ツイート | ![]() |