概要
WPFは3DグラフィックをサポートしたGUIコンポーネントで、Windowsデスクトップアプリを作ることができます。WPFをすこしさわっていたので、お絵かきプログラムを作ってみました。WPFはWindows Presentation Foundationの略ですが名前の通り多様な表現方法を簡単に利用することがでます。お絵かきプログラムでいろいろなWPF機能を使ってみます。
オープンソースなIT技術ではありませんが、少し勉強したのでメモ代わりに残しておきます。
ただいま加筆中につき未完
環境
Microsoft Visual Studio 2015 + WPF + VB
つくりたいもの
つくりたいものというよりだいぶん細分化された設計書になってしまってます。作りながらの作業なのでまずは忘れないうちにメモメモ・・・
handringDrawing クラス
コンストラクタ
w As Integer, _
h As Integer, _
image0 As System.Windows.Controls.Image, _
image1 As System.Windows.Controls.Image, _
image2 As System.Windows.Controls.Image, _
image3 As System.Windows.Controls.Image, _
Optional bmpfilepath As String = Nothing, _
Optional cmb_line As System.Windows.Controls.ComboBox = Nothing, _
Optional cmb_color As System.Windows.Controls.ComboBox = Nothing)"
"w: イメージ表示領域の横幅
h: イメージ表示領域の縦幅
image0 背景用イメージコントロール
iamge1 消しゴム機能用イメージコントロール
image2 描画機能用イメージコントロール
bmpfilepath 背景bmpファイルパス(指定なしの場合は背景なしで表示)
cmb_line 線種用コンボボックスコントロール
cmb_color 色情報用コンボボックスコントロール"
プロパティ
clipboardStatus
※描画モードが「選択」の場合にのみ有効"
[__/su_spoiler]
copyMode
※描画モードが「選択」の場合にのみ有効"
[__/su_spoiler]
Height
[__/su_spoiler]
isArrow
[__/su_spoiler]
isElipse
[__/su_spoiler]
isEraser
[__/su_spoiler]
isEraser2
[__/su_spoiler]
isPaint
[__/su_spoiler]
isPen
[__/su_spoiler]
isRect
[__/su_spoiler]
selectedMark
[__/su_spoiler]
progressValue
[__/su_spoiler]
selectedBlurrness
[__/su_spoiler]
selectedColor
[__/su_spoiler]
selectedDrawmode
[__/su_spoiler]
selectedThickness
[__/su_spoiler]
Width
[__/su_spoiler]
x
[__/su_spoiler]
y
[__/su_spoiler] [_/su_spoiler]
メソッド
Clear()
[__/su_spoiler]
ClearAll(Optional bmpfilepath As String = Nothing)
bmpfilepath: 読み込み対象のビットマップファイルを指定する(未指定の場合は背を表示しない)"
[__/su_spoiler]
ClearBitmapWrtable()
[__/su_spoiler]
EraseDrawing(pt As System.Windows.Point)
pt: イベント発生時のスタイラス(またはマウス)座標"
[__/su_spoiler]
ImageConvert(mode As enumImageConvertMode)
[__/su_spoiler]
PaintDrawing(pt As System.Windows.Point, paintCol? As System.Int32)
[__/su_spoiler]
PasteSelectedRect(rectPt As StrSelectedRectPt, Optional pt As Point = Nothing)
[__/su_spoiler]
read_xml
[__/su_spoiler]
readFile()
[__/su_spoiler]
save_xml
[__/su_spoiler]
saveAsImage(defaultPath As String)
defaultPath: 保存ファイル名選択ダイアログのデフォルトパスを指定する"
[__/su_spoiler]
saveImage(filefullpath As String)
filefullpath: 保存ファイル名を指定する"
[__/su_spoiler]
selectColor()
[__/su_spoiler]
SetEraserMode(mode As enumEraseMode)
mode: 開始または終了を設定する"
[__/su_spoiler]
StaylusDownMain(pt As Point)
pt: イベント発生時のスタイラス(またはマウス)座標"
[__/su_spoiler]
StylusMoveMain(pt As Point, Optional mouse_stat As MouseButtonState = MouseButtonState.Pressed)
pt: イベント発生時のスタイラス(またはマウス)座標
mouse_stat: マウスイベント発生時のマウス左ボタンステータス(スタイラスイベントの場合は未設定)"
[__/su_spoiler]
clearSelection()
[__/su_spoiler]
selectionComplete()
[__/su_spoiler]
Cut()
[__/su_spoiler]
Copy()
[__/su_spoiler]
Paste()
[__/su_spoiler] [_/su_spoiler]
ファンクション
内部メソッド
_readMyColors
[__/su_spoiler]
_readMyLines
[__/su_spoiler]
_writeMyColors
[__/su_spoiler]
_writeMyLines
[__/su_spoiler]
_CutorCopy(mode As enumSelectedRectCopyMode)
[__/su_spoiler]
_savePastingPt(pt As Point)
[__/su_spoiler]
_convGrayScale()
"_drawSelectionRect(rectPt As StrSelectedRectPt, Optional pt As Point = Nothing)
[__/su_spoiler]
Spoiler title
[__/su_spoiler]
TimerCount(stateInfo As Object)
[__/su_spoiler] [_/su_spoiler]
内部ファンクション
_saveImage(filefullpath As String) As Integer
[__/su_spoiler]
chkDrawmode(drawmode As enumDrawmode) As enumDrawModeType
[__/su_spoiler]
clrpnt(arg_pt As System.Windows.Point, paintCol? As System.Int32, stlevel As Integer)
[__/su_spoiler]
getAdr(arg_pt As Point, Optional pos As enumPos = enumPos.center) As Integer
[__/su_spoiler]
getNewPt(arg_pt As Point, Optional pos As enumPos = enumPos.center) As Point
[__/su_spoiler] [_/su_spoiler]
サンプル
説明
現在、いろいろ機能を実装中です。。
スクリーンショット
スクリプト
いまのところ、コードはお見せできるレベルじゃありません・・・
XAML
[code lang=""] [/code]
MainWindowクラス(コードビハインド)
[code lang=""] [/code]
独自クラス
[code lang=""] [/code]
課題
まとめ
関連記事
参考