点の描画

今回からは図形の描画に入りたいと思います。

SetPixel

SetPixelという関数でクライアントエリアに点を描画してみます。
1ピクセルづつ点を打っていくのは効率も良くなく
時間がかかり過ぎるのであまり実用性はないのですが・・・
描画の基本中の基本ということで。この関数だけでも
複雑な画像を作ろうと思えば作れますね^^;
例のごとく「多重起動の防止」のソースを使いまわしています。

     //座標
     int x,y;

座標を扱うので、ウィンドウプロシージャ内にx,yという変数を宣言します。

               //デバイスコンテキストを取得
               hdc = BeginPaint(hwnd, &paint);
               //ピクセルを描画
               for(y=0;y<240;y++){
                    for(x=0;x<240;x++){
                         SetPixel(hdc,x,y,RGB(x,0,y));
                    }// x
               }// y
               //デバイスコンテキストを解放
               EndPaint(hwnd, &paint);

SetPixel関数で座標と色を指定し、点を打ちます。
色の明るさが徐々に上がっていくグラデーション風にしてみました。
綺麗な感じになることでしょう。では実行してみましょう。

点の描画のグラデーション

綺麗なグラデーションが・・・出来たとはお世辞にもいえませんね。
それはこのmuseaの表現できる色が65,536色、つまり
表現の限度が16ビットカラー(High color)だからです。
(パソコンのTrue colorでは約1677万色ですね)
museaに限らず、PocketPCのほとんどは16ビットカラーなので
そこらへんはまぁ「6万色以上も使えるんだ!すごい!」とでも
ポジティブに考えてみましょう。

COLORREF SetPixel( HDC hdc, int X, int Y, COLORREF crColor );
第一引数 hdc には、デバイスコンテキストのハンドルを指定します
第二・三引数 x・y には、描画する点のX座標とY座標を指定します
第四引数 crColor には、描画する点の色を指定します

戻り値 成功すれば描画した点の色の値(またはその近似値)が、失敗なら-1が返ります。

また、点の色を取得するGetPixelという関数もあります。

COLORREF GetPixel( HDC hdc, int nXPos, int nYPos );
第一引数 hdc には、デバイスコンテキストのハンドルを指定します
第二・三引数 nXPos・nYPos には、色を取得する点のX座標とY座標を指定します

戻り値 成功なら指定した座標の色の値(またはその近似値)が、失敗ならCLR_INVALIDが返ります。

ソースのダウンロード

2005/5/20


戻る