• 締切済み

ペイント機能

VC++のMFCにて画像処理プログラムを作っているものです。 ペイントの機能を持たせたものを作りたいと考えています。 消しゴム、塗りつぶし、ペンの機能はどのようにつけたらよいのでしょうか? 分かる方がいらっしゃいましたらよろしくお願いいたします。

みんなの回答

回答No.1

 こんばんは。  大体以下で出来るとは思います。参考程度に。  (1)「ExtFloodFill」(塗り潰し)  http://msdn.microsoft.com/ja-jp/library/4a6334kf(VS.71).aspx  (2)「PolyLine」(鉛筆・消しゴム)  http://msdn.microsoft.com/ja-jp/library/bzaz1k1h(VS.80).aspx  (3)「ExtCreatePen」(消しゴム用のペン作成)  http://msdn.microsoft.com/ja-jp/library/cc428590.aspx ・(1)はこんな感じです。  //マウス座標下の色彩を取る  const COLORREF colorUnder = pDC->GetPixel(ptMouse);  //紫色のブラシを作る  CBrush brush;  brush.CreateSolidBrush(RGB(255, 0, 255));  //デバイスコンテキストにブラシを選択する  pDC->SelectObject(&brush);  //マウス座標下からcolorUnderと一致する色彩を紫色に塗り潰す  pDC->ExtFloodFill(ptMouse.x, ptMouse.y, colorUnder, FLOODFILLSURFACE); ・(2)(3)はこんな感じです。ペンのスタイルを変えれば共用できると思います。  //取り敢えず、ココらへんに描く  POINT arrPt[2] = {{20, 20}, {21, 21}};  //緑色のソリッドブラシを指定する(今回ハッチスタイルは無視)  const LOGBRUSH lBrush = {BS_SOLID, RGB(0, 255, 0), 0};  //丸いスタイルの太いペンを作る  HPEN hPenGeo = ::ExtCreatePen(PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_ROUND | PS_JOIN_BEVEL, 10, &lBrush, 0, 0);  CPen pen;  pen.Attach(hPenGeo);  //デバイスコンテキストにブラシを選択する  pDC->SelectObject(&pen);  //描く  pDC->Polyline(arrPt, 2); ・Polylineを使って描写する理由は、マウスをドラッグして引っ張り続ける間、途切れ目無く描き続ける為です。そうしないと、見た目が変になります。

関連するQ&A