投稿回数変更のお知らせ

C#を始めて2ヶ月余りの者です。
環境はW.7 C#.NET 2013です。
現在、以前C-Builderで作成したプログラムをC#に変換して居ます。

画像マスターを変更する所で、コンパイル出来なく成り、困って居ます。
やりたい事は、画像マスターがあり、これを表示して、マスターを変更したければカメラから読み込んだ画像を画像マスターに書き込むと言うものです。
C-Builderの時はBMPの読み書きは自分で作成しましたが、C#では関数があるので今回はこれを利用しました。

内容を簡略的に下に記述しました。AAAが画像マスターでBBBがカメラからの画像の代わりです。

ここで bmpSource1.Save(sCurDir + "\\BBB.bmp"); を実行すると、「別のプロセスで使用されているため、プロセスは ファイル~にアクセスできません。」とのエラーが表示されます。
良く考えてみれば、Readでオープンしている所に書き込もうとして居るのでエラーに成って当たり前ですので、bmpSource1 = new Bitmap(sCurDir + "\\AAA.bmp");の後に画像を別の場所に保存し、bmpSource1.Dispose();としてみた所、上手く行きませんでした。これもDisposeするのはバッファーであり、ファイルでは無いから当たり前かも知れません。
ネットで色々探して居る時に、何かのパラメーターでReadWriteモードの所を見つけましたが、bmpSource1 = new Bitmap(sCurDir + "\\AAA.bmp");には指定するパラメーターが見当たりませんでした。
何方か、画像ファイルの更新方法がお分かりに成る方、ご教授下さい。

よろしくお願い致します。

String sCurDir = System.IO.Directory.GetCurrentDirectory();
Bitmap bmpSource1;
Bitmap bmpSource2;

public Form1()
{
InitializeComponent();
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
bmpSource1 = new Bitmap(sCurDir + "\\AAA.bmp");
bmpSource2 = new Bitmap(sCurDir + "\\BBB.bmp");
pictureBox1.Image = bmpSource1;


bmpSource2.Save(sCurDir + "\\AAA.bmp"); <-ここで実行時エラー
}

A 回答 (1件)

bmpSource1の読み込みを ファイルネームの指定ではなく FileStreamを使えばいいようです



System.IO.FileStream fs = new System.IO.FileStream(sCurDir + "\\AAA.bmp", System.IO.FileMode.Open);

bmpSource1 = new Bitmap(fs);
fs.Close();

bmpSource2 = new Bitmap(sCurDir+ "\\BBB.bmp");

pictureBOx1.Image = bmpSource1;

// ファイルの保存形式を指定しないと png形式になってしまったかも
// 2013とかだと 拡張子からの自動判断に直ってるのかなぁ …
// 当方 2010Express
bmpSource2.Save(sCurDir + "\\AAA.bmp", System.Drawing.Imageing.ImageFormat.Bmp);
    • good
    • 0
この回答へのお礼

redfox63様

早速のご回答、有難う御座いました。
今、自宅のPCで動作確認を行い、正常に更新出来ており、障害が発生しない事を確認しました。

.Netを使って居て、使い勝手が違うので戸惑っていました。
やはりファイル類、Open、Get、Closeと並んで無いと安心出来ません。
Saveにもファイル形式指定があるのですね。人に見せるサンプルプログラムなのでファイル形式指定付きに変更します。

有難う御座いました。

お礼日時:2014/10/25 11:04

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


おすすめ情報