No.4
- 回答日時:
こんばんは。
ペイントソフトは4つ程作成した事があります。私もMSペイントをお手本にしていた時期があります。シンプルなのですが、以外に大変です。
ただ、MFCを使用するようなので、その点では作業量は低減されると思います。
>>でもまずは簡単な機能(線、矩形、円、自由線の描画、色換え)から着手する予定です。
(1)線、矩形、円、自由線の描画
C++で抽象化した方が楽でしょう。
入門書籍に良く出てくる文句に以下の様なものがあります。
class IShape
{
public:
virtual void Draw() = 0;
};
class CBox : public IShape
{
public:
virtual void Draw(){//□を描く}
};
class CCircle : public IShape
{
public:
virtual void Draw(){//○を描く}
};
こう言った事は、「オーバーライドの必要性を説く為に書かれたもの」なので、応用は出来ますが、実際には此の程度で済む程、単純な物ではないです。
「クリックして、ひっぱって、放すと描写される」をしますので、マウスのキャプチャーもバックバッファリングも必須になってきます。
兎に角、これらの取り扱いに慣れる必要があるかもしれません。
此処でのポイントは、後々に備えて「伸縮倍角」が変化する事も含めた作成しておく事でしょうか。
後になって「虫眼鏡」の機能を追加する時、座標計算の方法を修正するのも大変です。
(2)色換え
MSペイントで「色彩ダイアログ」がありますが、これは「コモンダイアログ」の一つで、直にでも使う事が出来ます。
「CColorDialog]
http://msdn.microsoft.com/ja-jp/library/6w6cd538 …
もちろん、徹底して自作しても良いでしょう。
・その他、思いついた事を記載させていただきます。
(1)何をするにも「STL」辺りは必須になってくるかもしれません。
これは、
p = new Class(...)
とか、
p = (xxx*)::malloc(...)
//pを使う
//遠く離れた所で
//pのサイズを拡大する
などと言う事を繰り返していると、その内失敗します(大変な事になる)。
(2)SetPixel()/GetPixel()を使用しない事でしょうか(重たいので画像処理には向かないです)。
(3)復元機能が有るなら、そちらを先にやらないと厳しいかもしれません(データ構造の要素にグラフィックバッファを格納し、其れをイテレータで参照して描写する事に成るかもしれません)。
(4)画像変換入出力と描画ツールの具象クラスは、DLLに置いた方が良いかもしれません。
(5)参照カウンタ式のスマート「ポインタ・リソース」位は無いときついかもしれません。
諸事情の理由によって、此の場合は「開放」して、此の場合だけは「開放」しない・・・。
こう言った事を繰り返しているうちに「メモリ・リソース」リークが生じたりします。そう言った事を無くす為にもスマート「ポインタ・リソース」があります(完全ではないが)。
ネットで検索していれば、誰かしら作っているかもしれませんが、「BOOSTライブラリ」に数種類スマートポインタがあるので、手っ取り早くそれを持って来るか、テンプレートメタプログラムして、自分で実装するかです。
ただし、標準のstd::auto_ptr<T>だけは、止めて置いた方が無難だと思います。
・・・とまぁ、色々あって全然書き切れないのですが、取り敢えず「実に面倒」な部分は、今まで挙げて来た部分でしょうか。先ずは、気軽に作って見ては如何でしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- その他(プログラミング・Web制作) Microsoft Forms とか、それに似たツールで計算をすることはできないか? 2 2023/01/14 11:26
- 介護福祉士・ケアマネージャー・社会福祉士 介護関係者の方に真面目な相談です!! 大変悩んでます…。。 介護専門学生ですが訪問介護に3日実習いき 1 2022/05/23 16:56
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- 画像編集・動画編集・音楽編集 画像ファイル作成について 2 2023/06/27 22:28
- プリンタ・スキャナー Brother MFC-7460DNの一時停止解除について 1 2022/12/03 12:38
- 書類選考・エントリーシート 【急ぎです】指定校推薦の志望理由書の添削お願いしたいです! 商学部で1600字中1595字です 志望 1 2023/08/24 02:54
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 美術・アート トレパク疑惑をかけられにくくするには ここ最近いわゆるトレパク警察のいいがかりがが厳しくなったようで 1 2023/08/21 09:59
- 大学受験 大学受験の勉強方法に関してです。 現在浪人していて、バイトも学校もないです。 独学自宅学習をしていま 1 2022/04/24 21:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NET フォーム上に描いたグ...
-
canvasで表示されてる画像を1...
-
このプログラミングをどう組み...
-
VB.NETのSendMessageを教えてく...
-
画面のちらつきの原因が知りた...
-
Labelコントロールの背景をグラ...
-
JAVAでの背景画像表示
-
C# DataGridView のCellPaintin...
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
-
エクセルVBAで、条件に一致する...
-
VB.NET getとsetの概念がわかり...
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
パワーポイントのVBAでテキスト...
-
関数内の変数に<summary>コメン...
-
private static という変数の修飾
-
DataGridViewでセルクリックイ...
-
複数の変数を宣言する時、同時...
-
Excelで =EMBED("Acrobat Docu...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVAでの背景画像表示
-
VB.NET フォーム上に描いたグ...
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
Javaで文字の角度を変えて表示...
-
canvasで表示されてる画像を1...
-
画面のちらつきの原因が知りた...
-
Labelコントロールの背景をグラ...
-
重なった要素上でのイベントで...
-
java.awt.peer?
-
Canvas等の図形を移動する時,直...
-
OpenLayersの描画を固定で表示...
-
ID3DXSprite::Drawメソッドに関...
-
SwingとEDT(イベントディスパッ...
-
C#のGraphicsクラスについてです。
-
複数画像表示切り替え Visual c++
-
Androidのフォントサイズ(SP)と...
-
Androidで画像の中で指定した範...
-
描画処理が実行されない
-
JavaScript でスライダーを作る...
おすすめ情報