画像の縮小と、複写について

解決


エミリー  2009-10-17 01:00:28  No: 142649

開発環境  Vista,  Access2007  です

初心者です。
次のようなことをフリー(シェア)ソフトなどを使わずに
実現させたいです。

【例】
画面の参照ボタンを押して、
AAというフォルダから画像(abc.jpg)を選択してフォームに表示
と同時に
表示されている画像(abc.jpg)をコピー縮小(例えば50パーセント)して
別フォルダABにファイル名をabc.jpgのまま保存

まったくの初心者です。
どなたか、実現できる方法があれば教えていただけないでしょうか?
よろしくお願いします。


san  2009-10-17 04:12:11  No: 142650

'画像を読み込む
If OpenFileDialog1.ShowDialog(  ) = Windows.Forms.DialogResult.OK Then
            fname = OpenFileDialog1.FileName

詳しくは下記のページで調べてください。
http://dobon.net/vb/dotnet/graphics/index.html


掲示板の上のぽにょ  2009-10-17 19:02:26  No: 142651

面白そうなので作ってみましたが
上書き保存の時に「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


掲示板の上のぽにょ  2009-10-17 19:11:42  No: 142652

保存の部分のコードが間違えていたようなので書き直すと今度は
パスの形式が無効です。とでます。何かが間違ってる?

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


a  2009-10-17 19:42:28  No: 142653

そりゃ、
  Dim filename As String = ""
なので、
  SaveFileDialog1.FileName = filename
でSaveFileDialog1.FileNameは""になっているから、
  PictureBox1.Image.Save("", ImageFormat.Jpeg)
を行っていることと同じなんじゃないの?


掲示板の上のぽにょ  2009-10-17 20:13:24  No: 142654

こうやってもエラーでます。

 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


subaru  2009-10-17 21:02:53  No: 142655

VB.NETの回答が付いているようですが、AccessなのでVBAなのでは?
#Access2007はVB.NET?・・・じゃないですね。

ライブラリーなども使えないのであれば
GDI+のFlat APIを叩くくらいしかないんじゃないでしょうか。

一応過去ログありました。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200803/08030008.txt


subaru  2009-10-17 21:37:34  No: 142656

蛇足かもしれませんが、OS が VISTA とのことなので、
一応 WIC(Windows Imaging Component)も使えるのかもしれません。
(IWICBitmapDecoderからIWICBitmapSourceに読み込み、IWICBitmapScalerでサイズ変換)

しかし VBA から使えるかどうかは分かりません。
あまり詳しくないのですがタイプライブラリーを書けば
VBA からでもアクセスできるのかもしれません。


エミリー  2009-10-26 20:59:50  No: 142657

回答頂いた皆さん、ありがとうございました。

参考に、やってみます。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加