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