1

メソッドを使用して、インメモリを作成する画像を返しSystem.Windows.Forms.Control、レンダリングされたコントロールを PNG に圧縮されたビットマップとしてエクスポートする ASP.Net Web ハンドラーを開発していますDrawToBitmap()。色の割り当てに関する問題を除いて、クラスは今のところ完全に機能しています。たとえば、これは Web ハンドラーによって生成された Gauge です。

ゲージ

ゲージの内部に割り当てられた色は、赤 ( #FF0000)、黄 ( #FFFF00)、緑 ( #00FF00) ですが、各色のくすんだバージョンしか得られません (#CB100F赤、#CCB70D黄、#04D50D緑)。

背景は、色のグラデーションを含む bmp ファイルです。背景がサンプルのグラデーション、黒キャンバス、白キャンバス、透明キャンバスのいずれの場合でも、背景が設定されていない場合でも色抜けが発生します。

  • 黒の背景で

黒の背景で

  • 背景透過あり

透明な背景で

  • 白い背景で

白い背景で

  • 背景セットなし

背景セットなし

  • Format32bppArgb のピクセル形式で

pixelformat 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

4 に答える 4

1

色をペイントするときは、アルファチャネルも正しく設定されていることを確認してください。アルファがある場合は、その暗い背景と混ざり合い、より暗い色になります。

于 2010-05-03T16:38:07.143 に答える
1

PNGのみでこれを試しましたか?私はずっと前にブラウザーで PNG (または JPEGS?) でこの問題に遭遇しましたが、IIRC GIF は問題を解消しました:

GIFがあなたの問題を長い間間違って解決すると言っているわけではありませんが、PNGの書き込み/読み取りが問題であるかどうかを教えてくれるかもしれません. 試してみて、BMP を試して、何か試してみてください。PNGを信じないでください。ビットマップを書き出す前に、rgb 値をログ ファイルにダンプして (または未加工のままディスクに保存し、Photoshop にインポートして) 数値を確認することができます。( LockBitsを使用してください。ビットマップのバイトの入出力に関するコードのチュートリアルがあります)。

于 2010-05-04T00:22:19.003 に答える
0

その三角形のポインターに非常に明るい黄色の部分があることに気付きました。問題は背景画像にある可能性があります。これらの弧をプリミティブで描いていますか、それともビットマップをロードしていますか? 赤/黄/緑のメーター部分に画像を使用していると仮定すると、入力形式によってはガンマの問題、色空間の問題などが発生する可能性があります。画像を使用している場合は、コードでこれらの形状を描画してみてください。黄色の三角形を作成するコードが何であれ、明るい色を取得しているため、同じ画像形式またはブラシ、または黄色の三角形を機能させるものを使用してください。

于 2010-05-04T00:57:54.107 に答える
0

Canvas はサードパーティが提供するクラスでした。パッケージにバグが見つかり、新しいバージョンがリリースされ、問題は最終的に解決されました. とにかくお時間をいただきありがとうございます!

于 2011-06-27T10:15:28.610 に答える