
No.7ベストアンサー
- 回答日時:
中心x0,y0、半径rの円を塗りつぶすには、いろいろと方法があると思います。
・ベタな方法
全座標(x,y)について、 (x-x0)*(x-x0)+(y-y0)*(y-y0) を計算、 <= r*r なら円の中なので色を付ける。
実際には、円に外接する正方形よりだけ確認すればよいで 、 x0-r<=x<=x0+r,y0-r<=y<=y0+rの範囲を調べる。
・y0-r<=y<=y0+r のyについて、dy = y - y0 とする。
dx=x-x0 とすると、r,dx,dyからなる直角三角形ができるので、値のわかっているr,dyからdxが求まる。
左右の座標がそれぞれ x0-dx,y と x0+dx,yになるので、その間に色を付ける。
・(塗りつぶさない)円をかくアルゴリズムをつかって、円を書く
→囲まれた領域を塗りつぶす方法(ペイントアルゴリズムと言われたりする)を使って、円の中を塗る。
No.6
- 回答日時:
まだ細かい点をつめる必要がありますが。
基本の流れは次の通り
1) 絵を描くための「キャンバス」となるものを用意する。
よくあるのが、 1画素あたりのバイト数 * 幅 * 高さ 分のunsigned char型の配列を用意する、というもの。
自動変数で用意すると大きな画像用のものはスタックが足りず確保できないので、(問題が無ければ)staticで宣言するとか、malloc/newで動的に確保する。または、std::vectorなどを使う。
場合によっては、専用の構造体/クラスやその配列を使ったり、[高さ][幅]の二次元配列にしたりする。
2)絵を描く
色を付けたい画素の座標に対応する要素の値を、付けたい色のものにする。
ライブラリによっては、専用の描画関数が用意されていることがある。
3)ファイルに出力する。
一番単純なのが、配列の内容をそのまま出力するRAWデータと呼ばれるもの。別のプログラムで正しく読み込むには、画素数や色数等の情報が別途必要。
通常の「画像ファイル」と呼ばれるものには、これらの情報が含まれるので、読み取り側でそれを使って元の絵を復元している。どの情報をどのように記録するかは、各フォーマットによる。
または、画像入出力用ライブラリを利用する。
C++の基本だけでなんとかできそうなのは、PNM形式で出力するものでしょうか。
http://ja.wikipedia.org/wiki/PNM_%28%E7%94%BB%E5 …
No.5
- 回答日時:
ブレゼンハムのアルゴリズムというのがあります。
これは2点を結ぶ線分を整数演算だけで描画するアルゴリズムです。しかしながら、このアルゴリズムの考え方を利用すると整数演算だけで楕円が描画できます。円は楕円の特殊な場合ですから、結局ブレゼンハムのアルゴリズムを利用すれば整数演算だけで円の輪郭線が描画できます。あとは円の左右端の間を埋めれば塗りつぶしの円が描けるはずです。
No.4
- 回答日時:
失礼ですがあなたがどの程度Windowsの描画処理に対して理解しているのかがわからないと具体的な回答は難しいと思いますよ
デバイスコンテキスト、Windowsメッセージ処理、ウィンドウプロシージャ、グラフィックデバイスの選択
などどの程度理解されているのでしょう
WM_PAINTメッセージおいて描画処理をすることになります
その為には 円そのものを描くためのペンと内部を塗るために使うブラシが必要になります
ココまでの説明で理解不能なのであればWindowsの描画の仕組みを勉強しなおしたほうがいいかもしれません
No.3
- 回答日時:
対象OS等や使用するAPIなどの具体的な情報があったほうが回答が付きやすいかと思います。
とりあえず対象をWindowsとして、Win32APIを直接叩いた場合…、と書こうかと思いましたが、長くなるので以下を参考にしてみてください。
http://www.geocities.jp/ky_webid/win32c/010.html
http://www.usamimi.info/~hellfather/win32api/API …
No.1
- 回答日時:
何に書くのか: 画面なのか、画像ファイルなのか、プリンタなのか
どんな形式で書くのか: 点を並べて円状のにするのか、文字を並べて円状にするのか、「円状の図形」という情報を書くのか
なにを使って書くのか: 全部自前で作るのか、画像用ライブラリを使うのか、別のソフトを自動操作して書かせるのか、OSの機能を使うのか、OSを使うのならそのOSは
と、手段や目的によって多くの方法があります。
もうすこし、やりたいことをまとめてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン Open Office.orgのDrawで描いた図形の塗りつぶしをしたい 1 2022/03/22 19:24
- 美術・アート 今年中1になったものです。絵のアドバイスを貰いたいです。 私はデジタルでイラストを描いています。 最 1 2022/04/03 14:09
- 芸術学 子供の絵 画像なし 心理 解る方お願いします。 4 2022/05/04 15:37
- 美術・アート デジタルの色塗りをする時毎回こんな感じで線画に沿って少しだけ塗りつぶせていなかったりするのですがどう 2 2022/10/05 21:37
- デザイン ロゴの無償依頼についてです。私は中学生で、趣味で絵を描いてます。 先日、私の小学校の同級生(A)がグ 3 2022/09/29 15:58
- 事件・犯罪 パトカーのボディーは白いので、お絵描きにうってつけです。さっそく白いボディーにうんこを塗ってお絵描き 7 2022/12/08 09:09
- 芸術学 画家のカラバッチョと同じ描き方で作品を作りたいのですが、 質問があります。 カラバッチョはどんな布の 1 2023/04/03 05:00
- 美術・アート タブレットで絵を描いてるものです。 アプリで絵を描いているのですが、 下書きの上から色塗ると下書きの 1 2022/05/09 23:06
- 美術・アート アート制作にお詳しい方教えてください。 キャンバスにモデリングペーストで絵を描いています。 通常アク 1 2022/10/17 21:26
- Google Maps Google mapの印刷 1 2022/10/12 21:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
TextBoxに文字を書いても表示さ...
-
CreateFontで回転させて印刷出...
-
最前面に無理やりフォームを持...
-
VC++プログラムをつかったBMP画...
-
Form1 Load で実行されない。
-
MFC 6.0 VC++ で、処理が重くな...
-
word
-
画像の印刷について
-
VB.netでのライン描画方法がわ...
-
InvalidateRectの使い方について
-
NVIDIAのシェーダーキャッシュ
-
[VB.net] DataGridViewの列ヘッ...
-
MFCでOnPaintのタイミング
-
ウインドウサイズを変更しても...
-
BitBltでの表示での問題です。
-
FlexGridの一部のみ表示を更新...
-
win32api 画面のちらつき
-
エクセルでガンチャートを作成...
-
[Win32API]JpegをDIBに変換する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
TextBoxに文字を書いても表示さ...
-
VB6,リストボックスの特定行の...
-
NVIDIAのシェーダーキャッシュ
-
panelのスクロール表示について
-
VC++プログラムをつかったBMP画...
-
VBAにGDI+を参照させる方法
-
google Colabでmatplotlibの描...
-
MFCでOnPaintのタイミング
-
MFCのタイマーのつかい方を教え...
-
UpdateData( FALSE); による文...
-
CStaticコントロールの静的イメ...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
win32api 画面のちらつき
-
c++ ダブルバッファリング、以...
-
CDC(LineTo)で描画した線を透過...
-
BitBltでの表示での問題です。
おすすめ情報