GDI図面をBMPにエクスポートするときに「本物の」色を取得する方法
-
02-10-2019 - |
質問
メモリを作成する画像を返すASP.NET Webハンドラーを開発しています System.Windows.Forms.Control
メソッドを使用して、PNGに圧縮されたビットマップとしてレンダリングされたコントロールをエクスポートします DrawToBitmap()
. 。カラー割り当ての問題を除いて、クラスは現在完全に機能しています。たとえば、これはWebハンドラーによって生成されるゲージです。
ゲージの内側部分に割り当てられた色は赤です(#FF0000
)、 黄色 (#FFFF00
)そして緑(#00FF00
)しかし、私はそれぞれの色のダリーバージョンだけを取得します(#CB100F
赤の場合、 #CCB70D
黄色と #04D50D
緑の場合)。
背景は、色勾配を含むBMPファイルです。色の損失は、背景がサンプル、黒いキャンバス、白いキャンバス、透明なキャンバスなど、バックグラウンドセットがない場合でも、勾配であるかどうかにかかわらず発生します。
- 黒い背景で
- 透明な背景を備えています
- 白い背景で
- 背景セットなし
- format32bppargbのピクセル形式
複数のビットマップカラーディープ、出力形式、圧縮レベルなどを試しましたが、どれも機能していないようです。何か案は?
これはソースコードの抜粋です。
Bitmap bmp = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Image bgimage = (Image) HttpContext.GetGlobalResourceObject("GraphicResources", "GaugeBackgroundImage");
Canvas control_canvas = new Canvas(); //inherits from Control
....
//the routine that makes the gauge
....
control_canvas.DrawToBitmap(bmp, new Rectangle(0, 0, w, h));
解決 4
キャンバスは、サードパーティによって提供されるクラスでした。私たちは彼らのパッケージにバグを見つけ、彼らは新しいバージョンをリリースし、問題が最終的に解決されました。とにかくあなたの時間をありがとう!
他のヒント
色をペイントするときは、アルファチャネルも正しく設定されていることを確認してください。アルファがある場合は、その暗い背景とブレンドされ、暗い色になります。
PNGのみでこれを試しましたか?私はずっと前にブラウザでPNGS(またはJPEGS?)でこの問題にぶつかりましたが、IIRC GIFは問題を排除しました。
私はGIFが長い間違ってあなたの問題を解決すると言っているわけではないことに注意してください。試して、BMPを試して、何かを試してください。 PNGを信じないでください。 RGB値をログファイルにダンプして(またはRAWとしてディスクにしてPhotoshopにインポートする)、ビットマップを書き出す前に数字が何であるかを確認してみてください。 (使用する ロックビット;ビットマップの内外でバイトを取得するためのコードのチュートリアルがあります)。
私はあなたがその三角形のポインターに本当に明るい黄色の部分があることに気づいたので、問題は背景画像にある可能性が高いです。これらのアークをプリミティブで描いたり、ビットマップをロードしたりしていますか?入力形式に応じて、ガンマの問題、カラースペースの問題などがある可能性があります。赤/黄色/緑色のメーターパーツに画像を使用していると仮定します。画像を使用している場合は、これらの形状をコードで描画してみてください。黄色の三角形が明るい色を取得するコードが何であれ、同じ画像形式やブラシなどを使用して、黄色の三角形を機能させます。