2

これに関連するソースから次のコードを抽出しました。

using (Bitmap spriteBitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb))
{
        using (Graphics spriteGraphics = Graphics.FromImage(spriteBitmap))
        {
                Rectangle imageRect = new Rectangle(0, 0, imageInfo.Width, imageInfo.Height);

                using (Bitmap clonedImageBitmap = imageInfo.ImageBitmap.Clone(imageRect, spriteBitmap.PixelFormat))
                {
                        clonedImageBitmap.SetResolution(spriteBitmap.HorizontalResolution, spriteBitmap.VerticalResolution);

                        spriteGraphics.DrawImage(
                                clonedImageBitmap,
                                mappedImageInfo.X, mappedImageInfo.Y,
                                imageRect,
                                GraphicsUnit.Pixel);

                                spriteGraphics.Flush(FlushIntention.Flush);
                }

                imageInfo.DisposeBitmap();
        }
}

このコードは、Azure のコンピューティング エミュレーターでローカルに完全に機能します。しかし、それを展開してコードを実行すると、もはや機能せず、spriteGraphics.DrawImage で有名な ArgumentException "Parameter is not valid" で失敗します。

テスト目的で、clonedImageBitmap の詳細をログに記録して、何かが異なるかどうかを確認しました。ローカルとクラウドで同じではないことがわかった唯一のものは.Flagsです->ローカルには77842があり、クラウドには77846があるため、ImageFlagsHasTranslucentが設定されているようですが、それがクラウドで問題を引き起こし、これがどのように発生するかできることは、現時点では私の知識を超えています。

おそらく誰かが奇妙な問題で私を助けることができますか?

前もって感謝します。

HeManNew

4

1 に答える 1

1

アプリケーションの性質とそれが実行されている場所のために、確かに難しい問題は機能すると思います。

ここでの主な問題は、使用しているクラス/API が System.Drawing 名前空間からのものであり、この名前空間のクラスが Windows フォームで使用するために設計されていることを知っておく必要があることです。Windows または ASP.NET サービス内での使用はサポートされていないため、これらの API を Windows Azure Web ロールまたは Worker ロールで使用することを控えることができる限り、これが最適なオプションです。クラウド アプリケーションは主に Web アプリケーションまたはバックグラウンドで動作するアプリケーションであり、System.Drawing へのクラス/API 依存を回避する主な理由は、状況をより複雑にするために GDI にさらに依存する鍵です。

API が失敗する場合、それは単純に Web 環境で使用できる場合でも互換性がないという理由です。Windows Azure のドキュメントでも、System.Drawing の API/クラスを完全に使用しないようにすることが推奨されています。コードに使用する必要がある場合は、独自の Windows Azure アプリケーションでこれらのクラスを使用する場合は、徹底的なテストを実施する必要があります。

于 2012-09-19T23:11:19.897 に答える