2

メイン ウィンドウとして設定ウィンドウを持つ WPF プロジェクトを作成し、そこからゲーム ウィンドウを開きます。ゲーム ウィンドウを開くと、次のコードは複数の画像から 1 つの長い画像ストリップを作成します。

var target = new System.Drawing.Bitmap((int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var graphics = System.Drawing.Graphics.FromImage(target);
graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;

int i = 0;
foreach (Image img in images)
{
     System.Drawing.Image drawingImg = ConvertWpfImageToImage(img);
     System.Drawing.Bitmap source = new System.Drawing.Bitmap(drawingImg);
     graphics.DrawImage(source, i, 0);
     i += 320;
}
target.Save(@".\resources\images\conveyerBeltSymbols\bigPicture.png");

これは最初は問題ないようです(ビットマップ画像をpngとして保存していますが、それはわかっています)が、2番目のウィンドウを閉じて再度開こうとすると(最初のウィンドウも閉じずに)External Exception was unhandled. A generic error occurred in GDI+.

Dispose()両方graphicsに追加しようとしましたが、メソッドtargetにも追加しようとしましたが、何もうまくいきませんでした。ImageFormat.Pngtarget.Save

誰かが解決策を持っていますか?

4

2 に答える 2

2

コンストラクターを使用して画像をロードするnew BitmapImage(Uri)と、ファイルがロックされたままになります。使用してみてください:

var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(@".\resources\images\conveyerBeltSymbols\bigPicture.png", UriKind.Relative);
image.EndInit();

slider.ImageSource = image;
于 2013-07-17T19:24:47.647 に答える
0

各 GDI オブジェクトを適切にusing呼び出しDispose()ていることを確認してください...BitmapImage. これで問題が解決するはずです。管理されていないリソースを適切に解放していない可能性があります。

于 2013-07-17T18:56:04.733 に答える