アプリ版:「スタンプのみでお礼する」機能のリリースについて

角が丸い長方形を描画する自作関数を作成中なのですが、どうやったら角に丸みをつけられるのでしょうか?
SetPixelで1ドットずつ描画しています。
また、その図形に影をつけたいのですがどこか参考になるサイト等ありましたら教えてください。

開発環境は
WindowsXP
Visual C++ 6.0 です。

よろしくお願いいたします。

A 回答 (3件)

★アドバイス


・API に RoundRect() 関数があります。
 下の『参考URL』をどうぞ。
・自作する場合は Arc()、Pie() と直線(長方形)を組み合わせて描画します。
 特に自作する必要がなければ RoundRect() 関数を利用しましょう。
・以上。

参考URL:http://wisdom.sakura.ne.jp/system/winapi/win32/w …
    • good
    • 0
この回答へのお礼

自作する必要があったので助かりました。
Arc()とPie()を使うのですね。
勉強不足でした。
いつも的確なアドバイス、ありがとうございます。

お礼日時:2007/12/02 23:44

GDIに角丸の四角形を描画する関数がありますよ。


http://mtbeta.msdn.microsoft.com/ja-jp/library/a …
MFCを使っているならCDCクラスに同様のメンバ関数があります。
    • good
    • 0
この回答へのお礼

描画する関数が用意されていましたね。
勉強不足で申し訳ありません。
自作するにあたって参考になりました。
ありがとうございました。

お礼日時:2007/12/02 23:46

Visual C++ 6.0を使ったことはないので原理的な部分だけ.


例えば
(0,0),(100,0),(100,50),(0,50)を角とする長方形に半径1の丸みを付けたいなら
(1,0)-(99,0),(100,1)-(100,49),(99,50)-(1,50),(0,49)-(0,1)
の直線を描画した後、
(1,1)を中心とした半径1の円の左下
(99,1)を中心とした半径1の円の右下
(99,49)を中心とした半径1の円の右上
(1,49)を中心とした半径1の円の左上
を描画すればいいのでは?
コンピュータ上では「円」というより「正多角形」で円を表現することになると思いますので、仮に半径r,中心座標(a,b)の円を正360角形で表現すると
for(int j=0;j<360;j++)
{
x=r*cos(2π/num*j)+a;
y=r*sin(2π/num*j)+b;
}
となると思います。2π/numはラジアン単位で表現するためです。

あとは右上とか限定するにはjが0-90,90-180,180-270,270-360で分ければいいのではないかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!