2

クリップアート (png ファイルから) を bmp オブジェクトに追加する際に問題があります。いくつかのクリップアートを jpeg 画像に追加し、それを保存した後、ミステリーが発生します。保存された画像にいくつかのクリップアートが存在しますが、いくつかは存在しません。

クリップアートを画像に追加するコードは次のとおりです。

    using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(this._image))
        {
            gfx.CompositingMode = CompositingMode.SourceOver;
            gfx.CompositingQuality = CompositingQuality.HighQuality;
            gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;


            gfx.DrawImage(image, posX, posY, newWidth, newHeight);
            gfx.Save();
        }

私が間違っていること、またはこの状況が発生する理由を誰かが説明できますか?

編集:ASP.NETアプリケーション内でこのコードを使用すると発生し、Windowsアプリケーションで使用するとすべて問題ありません

4

1 に答える 1

0

これが問題の原因であるかどうかはわかりませんが、linegfx.Save()はペイントした画像を画像に保存しませんが、Graphicsオブジェクトの状態を保存します。変更をイメージに保存するために、必ずメソッドを呼び出しImage.Save()て、コードのどこかで前のイメージを復元していないことを再確認してください。Graphics.Saveitメソッドの詳細については、 http: //msdn.microsoft.com/en-us/library/system.drawing.graphics.save (v = vs.100).aspxを参照してください。

アップデート

あなたはそれが透明性の問題だとコメントに書いた。これが原因である場合は、ファイルからクリップアート画像をロードするコードを確認してください。これは、画像ファイルで使用されているさまざまなピクセル形式が原因である可能性もあります。画像読み込みアルゴリズムを次のようなものに変更すると、問題が解決する場合があります。

  • 背景画像をロードします。たとえば、次のように実行されたとします。Image backgroundImg = new Bitmap(backgroundImgPath);
  • すべての画像のベースとして新しい空の画像を作成します。this._image = new Bimap(backgroundImg.Width, backgroundImg.Height, PixelFormat.Format32bppArgb);
  • で中身backgroundImgを描くthis._imagegfx.CompositingMode = CompositingMode.SourceCopy;
  • 次に、今行っているようにクリップアートを描くことができます(方法をコメントアウトするだけですgfx.Save();

これが役に立ったかどうか教えてください。

于 2012-12-15T09:12:29.900 に答える