tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル PictureBox1.Image.Save("C:\Test.bmp")
記事No12039
投稿日: 2020/08/05(Wed) 22:14
投稿者佐々木
お世話になります。

USBカメラで取り込んだ画像の保存を考えています。

OSはWindows7で
VB.net 2010 使用しています。

PictureBox1.Image.Save("Test.bmp")
とすると*.exeがあるフォルダに
Test.bmpが問題なく作成されます。

画像の保存先を指定して実行すると
例)PictureBox1.Image.Save("C:\Test.bmp")
次のようなエラーでます。
対処方法ありましたらご教授ください。

'System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が System.Drawing.dll で発生しました。

追加情報: GDI+ で汎用エラーが発生しました。

[ツリー表示へ]
タイトルRe: PictureBox1.Image.Save("C:\Test.bmp")
記事No12040
投稿日: 2020/08/05(Wed) 23:23
投稿者佐々木
こちらで保存できました。

PictureBox1.Image.Save("C:\\test\\new1.bmp", _
                      System.Drawing.Imaging.ImageFormat.bmp)

[ツリー表示へ]
タイトルRe^2: PictureBox1.Image.Save("C:\Test.bmp")
記事No12041
投稿日: 2020/08/07(Fri) 08:59
投稿者魔界の仮面弁士
> PictureBox1.Image.Save("C:\Test.bmp")

そこは通常、読み取り専用の場所です。管理者モードで実行しない限りは。

VB に限らず、それ以外のソフトウェア…たとえば
「ペイント」や「メモ帳」や「Excel」などから、
C:\ 直下にファイルを保存しようとした場合も、
アクセス許可が無いということで警告され、保存が拒否されますよね。



>  PictureBox1.Image.Save("C:\\test\\new1.bmp", _
>                       System.Drawing.Imaging.ImageFormat.bmp)

\ 記号を重ねて記述したのは何故でしょう?

たとえ実際に保存できているとしても、実際に \\ を含むパスを指定しているわけでは
無いのであれば、そのようなパス指定は誤りと言えるかと思います。


たとえば C# の場合、「\」とそれに続く文字がエスケープシーケンスと見做されるため、
"C:\test\new1.bmp" というパスを表す場合に、
 label1.Text = "C:\\test\\new1.bmp"; // \\ 表記
 label2.Text = @"C:\test\new1.bmp"; // 逐語的文字列リテラル
などの表記が使われますが、Visual Basic ではエスケープシーケンスが無いので、
 Label3.Text = "C:\test\new1.bmp"
のように、単一の「\」表記で表せるはずです。

hhttps://docs.microsoft.com/ja-jp/dotnet/standard/io/file-path-formats

[ツリー表示へ]