午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

複数の画像を並べて重ねて1枚の画像にするPixtack紫陽花2.4.14.94

前回 2014/12/30は1日前
 
 
編集中に移動したときマーカーが置いてけぼりになるのを修正
編集中に画像追加したら編集終了するようにした
図形の追加は図形追加ボタンにした
先端の形を選べるようにした
編集中なら先端の変更もできるようにした
サイズ変更時の描画処理は割にあわないくらい重いので廃止した
サイズ変更後と画像移動後に背景を再描画するようにした
ExPictureBoxクラスで初めてメソッド(関数?)らしきものを使った
イメージ 7
1.4MBもあるアニメーションgif
 
 

f:id:gogowaten:20191016133812p:plain

少し変えた
 
イメージ 2
描画する線の種類
実際に使えるのは上にある4種類だけ
その下のアルファベット表記の項目は予定でまだ機能しない
図形の編集中に変更しても無視されるので図形追加時専用
イメージ 3
先端の形
VBに最初から入っているもの全部入れてみたけどよくわからないものがある
指定しても形が変わらないものがある
終端の形もあるけどまだ書いていないので機能しない
 

f:id:gogowaten:20191016133848p:plain

図形編集中に移動した時にもサイズ変更のマーカーも移動するように修正
 

f:id:gogowaten:20191016133908p:plain

編集中の図形を移動した後に図形の背景を再描画するようにしたので
移動先で図形の頂点を動かした時に自然な背景になった
この処理はめんどくさいかと思っていたけど簡単だった
 
 
 
 
 
Public Class ExPictureBox
    Inherits PictureBox
    'ExPenを呼ばれた時に色、太さ、先端、終端を設定して渡す
    Private _ExPen As Pen
    Public Property ExPen As Pen
        Get
           
            With _ExPen
                .StartCap = _ExStartLineCap
                .EndCap = _ExEndLineCap
                .Width = ExPenWidth
                .Color = ExPenColor
            End With
            Return _ExPen
        End Get
        Set(value As Pen)
            _ExPen = value
        End Set
    End Property
    Private _ExStartLineCap As Drawing2D.LineCap
    Private _ExPenStartCap As PenCap
    Public Property ExPenStartCap As PenCap
        Get
            'Return _ExStartLineCap
            Return _ExPenStartCap
        End Get
        Set(value As PenCap)
            _ExStartLineCap = PenCap2LineCap(value)
            _ExPenStartCap = value
            
        End Set
    End Property
    Private _ExEndLineCap As Drawing2D.LineCap
    Private _ExPenEndCap As PenCap
    Public Property ExPenEndCap As PenCap
        Get
            'Return _ExEndLineCap
            Return _ExPenEndCap
        End Get
        Set(value As PenCap)
            _ExEndLineCap = PenCap2LineCap(value)
            _ExPenEndCap = value
        End Set
    End Property
    Enum PenCap
        平坦
        矢印
        四角
        丸
        三角
        四角アンカー
        丸アンカー
        ダイヤアンカー
        なし
        アンカーマスク
        カスタム

    End Enum
    Private Function PenCap2LineCap(pc As PenCap) As Drawing2D.LineCap
        Dim lc As Drawing2D.LineCap
        Select Case pc
            Case PenCap.アンカーマスク
                lc = Drawing2D.LineCap.AnchorMask
            Case PenCap.カスタム
                lc = Drawing2D.LineCap.Custom
            Case PenCap.ダイヤアンカー
                lc = Drawing2D.LineCap.DiamondAnchor
            Case PenCap.丸
                lc = Drawing2D.LineCap.Round
            Case PenCap.丸アンカー
                lc = Drawing2D.LineCap.RoundAnchor
            Case PenCap.三角
                lc = Drawing2D.LineCap.Triangle
            Case PenCap.四角
                lc = Drawing2D.LineCap.Square
            Case PenCap.四角アンカー
                lc = Drawing2D.LineCap.SquareAnchor
            Case PenCap.平坦
                lc = Drawing2D.LineCap.Flat
            Case PenCap.矢印
                lc = Drawing2D.LineCap.ArrowAnchor
            Case PenCap.なし
                lc = Drawing2D.LineCap.NoAnchor

        End Select

        Return lc

    End Function
    'ペンの太さ、Penがあれば要らないかと思ったけど太さだけを変更したいときにあるとラク
    Public Property ExPenWidth As Single
    'Penの色、これもあったほうが便利
    Public Property ExPenColor As Color
End Class
 
PictureBoxを継承して作ったExPictureBoxクラスに図形の描画設定を保存している
その中のPenの設定で
Penには色、太さ、先端形状、終端形状とかいろいろな要素がある
その中の先端形状を指定するときにはドロップボックスからにしている
選ぶときには英語じゃなくて日本語で選びたいので(今思ったけど英語日本語関係ないな)
日本語表記の列挙型(列挙体?)Enum PenCapを作ってそれをドロップボックスに表示
列挙型は書いた順番に番号が割り振られるのでドロップボックスのインデックスの番号と一致するから都合がいい
ドロップボックスに列挙したものを追加する時は
 Dim ec As String() = [Enum].GetNames(GetType(ExPictureBox.PenCap))
        Me.ComboBoxEndCap.Items.AddRange(ec)
このGetNamesは初めてかな、GetTypeはエクセルではよく使っていたけど…こういう使い方もあるんだ

参照したところ
ドロップボックスから選択された時に受け取ったpencapはそのままではPenの設定に使えないので英語のLineCapに変換
 Private Function PenCap2LineCap(pc As PenCap) As Drawing2D.LineCap
これで受け取ったPenCapプロパティをLineCapに変換してそれぞれ保存
図形を描画するときにはそれらを設定したPenだけがあればいいので
クラス側でExPenってのを作っておいてそこで設定を詰め込んで渡している?
新しいことだらけでわかってないけど、いろいろいじっているうちに動くようになったw
図形の頂点移動でリアルタイムで画像サイズを変更するのをやめて手動にしてからずいぶん楽になったというか順調に進むようになった、諦めが肝心
 
ダウンロード先1
 
ダウンロード先2(ヤフーボックス)
テスト05-2パネル追加_20141231.zip
 
ヤフーボックスで不便なのが
ブログを書いている途中でファイルをアップロードしようとすると
パスワード入力を求められるので入力してアップロード
ブログにファイルのアドレスを書いて
さあ、ブログ記事かけたぞーって決定ボタンを押すと不正なアクセスとか言われて
書いた記事が消えてしまう
なので書いている途中の記事を一旦投稿してから
ファイルをアップロードしてアドレスを取得して記事を修正でアドレス記入
ってめんどくさい
アップロードしてから記事を書けばいいんだけど書いている途中でもいろいろ調整しながらだからなあ
 
イメージ 6
パネルアタック31
 
次回 2015/01/01は1日後