C++ 6 で作成されたアプリがあり、交通マップの空白のポリゴンを埋めて現在の交通状況を表示します。緑は良い、黄色は混雑している、など。
「シェル マップ」は、何も塗りつぶされていない長方形と多角形を使用した道路のビットマップです。データは道路センサー (ワイヤ インダクタ ループ) から収集され、ポリゴンはループ検出器のデータに基づいて塗りつぶされます。
マップが変更されると、誰かがペイントでビットマップを手動で拡大し、混雑色が塗りつぶされるそれぞれの新しい形状の内側の座標を取得する必要があります。マップのスケルトンを構成するポリゴンはすべてネイビー ブルーで描画されます。 、白い背景の上。
アプリを作りました。ここで、ユーザーがポリゴンの白い部分の内側をクリックすると、内側の境界のポイントがユーザーに表示され、内側の許可証がペイントされていることを示す拡大されたサムネイルが表示されます。
.Net では、周囲が完全にペイントされます。
C++ 6 アプリでは、一部のポリゴンがアプリを指しています。コレクションが正しく表示されません。
msPaint を調べたところ、.Net は MS Paint と同じようにポイントを描画しません。
簡単な例を次に示します。コードは、1 つのボタンと 1 つのラベルを持つ 1 つのフォームから作成されます。ビットマップに線が描かれ、ビットマップが見えるように「拡大」され、ラベルに表示されます。
描画される線分は、同じ 2 点を使用してペイントで線を描画する場合、MS ペイントで描画する線分と同じではありません。
private void button1_Click(object sender, EventArgs e)
{
Bitmap bm = new Bitmap(16, 16);
Graphics g = Graphics.FromImage(bm);
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.None;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Default;
Point pt = new Point(1, 3);
Point pt2 = new Point(5, 1);
// If you reverse the points, the same line is drawn.
g.DrawLine(Pens.Orange, pt, pt2);
// label1.Image = bm;
Bitmap bm2 = ZoomMap(8, bm);
g.Dispose();
bm.Dispose();
label1.Image = bm2;
}
private Bitmap ZoomMap(int zoomValue, Bitmap bm)
{
Bitmap zoomedBitMap;
Size sz = bm.Size;// new Size(75, 75);
Size newSize = new Size(sz.Width * zoomValue, sz.Height * zoomValue);
zoomedBitMap = new Bitmap(newSize.Width, newSize.Height);
Graphics gr = Graphics.FromImage(zoomedBitMap);
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
gr.PageUnit = GraphicsUnit.Pixel;
gr.DrawImage(bm, 1, 1, newSize.Width, newSize.Height);
gr.Dispose();
return zoomedBitMap;
}
どのような設定を適用しても、C# で MS ペイントを模倣する方法はありませんが、C++ 6 では MS ペイントを完全に模倣します。
既存のビットマップに描画するために呼び出すことができる Windows API の種類はありますか?
返信ありがとうございます。