かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[WPF][C#]2Dの描画

今まで、TemplateやBindingといった部分を中心に勉強をしてきた。
今日は、ちょっと毛色を変えてWPFでの2Dの描画についてやってみようと思う。

WPFの協力なコントロール群も、最終的には2Dとして描画されるのでWPFにおける2D描画を勉強するってことは損にはならないはず。というかやらねばならぬ。と思ったのでやることにした。

WPFのピクセル

WPFを使う限り、画面上の1ピクセルというものを塗りつぶすと言ったことは厳密には出来ないようだ。何故ならWPFの1ピクセルは必ず1/96インチになる。つまりデバイスに依存しないということだ。
これによって「画面の解像度がめっさ高い画面とかでも、常に同じ大きさでレンダリングされるといったメリットがある。」とのこと。

確かに。覚えておこう。
因みにSilverlightでは、1ピクセルは本当に1ピクセルらしいという話を聞いた。聞いただけで確認はしてない。
ブラウザとかだと1/96インチにするのは難しかったのかなぁ?

ジオメトリ

WPFの2Dの描画を細かく砕いていくと、ジオメトリという単位に落ち着くらしい。つまり、ジオメトリをマスターすれば、描画については大体OKとなるみたいだ。

んで、ジオメトリで一番強力なのが、PathGeometryになる。
PathGeometryは、一連の図形で構成される。図形は、一連のセグメントとして構成される。
とりあえず、この関係がわかるような簡単なXAMLを書いてみた。Wpf2DEduという名前のプロジェクトを作ってWindow1.ぁmlにタグを書いていく。

<Window x:Class="Wpf2DEdu.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Canvas>
        <!-- 塗りつぶしは赤色 線は黒色で描画 -->
        <Path Width="200" Height="200" Fill="Red" Stroke="Black">
            <Path.Data>
                <!-- ジオメトリ登場 -->
                <PathGeometry>
                    <PathGeometry.Figures>
                        <!-- 図形登場 -->
                        <PathFigure StartPoint="10,10">
                            <!-- セグメント登場 -->
                            <LineSegment Point="100,100" />
                        </PathFigure>
                    </PathGeometry.Figures>
                </PathGeometry>
            </Path.Data>
        </Path>
    </Canvas>
</Window>

これを実行すると、(10,10)から(100,100)ぬ向かって一本の黒い線が表示される。
image

PathFigureで開始点を指定して、LineSegmentで、どのポイントまで線を引っ張るのかを指定するイメージみたい。LineSegmentを複数指定すると、もうちょい複雑な図形が描画できる。

<Window x:Class="Wpf2DEdu.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Canvas>
        <!-- 塗りつぶしは赤色 線は黒色で描画 -->
        <Path Width="200" Height="200" Fill="Red" Stroke="Black">
            <Path.Data>
                <!-- ジオメトリ登場 -->
                <PathGeometry>
                    <PathGeometry.Figures>
                        <!-- 図形登場 -->
                        <PathFigure StartPoint="10,10">
                            <!-- セグメント登場 -->
                            <LineSegment Point="100,100" />
                            <LineSegment Point="100,200" />
                            <LineSegment Point="10,200" />
                        </PathFigure>
                    </PathGeometry.Figures>
                </PathGeometry>
            </Path.Data>
        </Path>
    </Canvas>
</Window>

実行すると、今度はちゃんと塗りつぶしまで行われた図形が表示される。
image

よくよく見ないと気づかないけど、最後の点から開始点までは、線がひっぱられてない。LineSegmentを追加することで線をひっぱることは出来るけど、PathFigureにはIsClosedというプロパティがあるので、それをTrueに設定することで自動的に図形が閉じるように線をひっぱってくれる。

<!-- IsClosedをTrueに設定 -->
<PathFigure StartPoint="10,10" IsClosed="True">

よく見ないとわからないけど、今度は左端に黒い線が入ってる。
image

曲線をかを描画することも出来る。これには、BezierSegmentを使う。これを使うことでベジエ曲線をお手軽に描画できる。

<Window x:Class="Wpf2DEdu.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Canvas>
        <!-- 塗りつぶしは赤色 線は黒色で描画 -->
        <Path Width="200" Height="200" Fill="Red" Stroke="Black">
            <Path.Data>
                <!-- ジオメトリ登場 -->
                <PathGeometry>
                    <PathGeometry.Figures>
                        <!-- 図形登場 -->
                        <PathFigure StartPoint="10,10" IsClosed="True">
                            <!-- セグメント登場 -->
                            <LineSegment Point="100,100" />
                            <!-- 制御点を2つ(Point1, Point2)と使用して終点(Point3)まで線を引く -->
                            <BezierSegment Point1="200,133" Point2="0,166" Point3="100,200" />
                        </PathFigure>
                    </PathGeometry.Figures>
                </PathGeometry>
            </Path.Data>
        </Path>
    </Canvas>
</Window>

これを実行すると、さっきより不思議な図形が出来上がる。
image

ベジエ曲線には、QuadraticBezzierSegmentという制御点を1つだけ指定するものも用意されている。(10,10)の位置から、制御点(200,150)を使って(100,200)まで描画するには、以下のような感じになる。(ここからXAML全体じゃなくて一部抜粋のみ示します。)

<!-- 図形登場 -->
<PathFigure StartPoint="10,10" IsClosed="True">
    <!-- 制御点が1つでいいベジエ曲線 -->
    <QuadraticBezierSegment Point1="200,150" Point2="100,200" />
</PathFigure>

実行すると下のような感じになる。
image

ベジエ曲線じゃなくて単純な弧を描きたいってときにはArcSegmentが使える。ArcSegmentはPointで指定した点までSizeで指定したサイズの円の弧を描く。SweepDirectionプロパティを使うと、弧が上に来るか下に来るかを指定できる。

<PathFigure StartPoint="10,10" IsClosed="True">
    <!-- 弧が上 -->
    <ArcSegment Point="100,100" Size="200,200" SweepDirection="Clockwise"/>
    <!-- 弧が下 -->
    <ArcSegment Point="150,150" Size="200,200" SweepDirection="Counterclockwise"/>
</PathFigure>

実行結果は下の通り。
image

こういうのを駆使して、デザインセンスのある人が綺麗な図形を描くのだという。
因みに俺にセンスは無いorz

投稿日時 : 2008年9月7日 21:59

Feedback

# XYNqTMTbZbUFjp 2011/12/26 23:17 http://www.discreetpharmacist.com/fre/index.asp

Yeah, in my opinion, it is written on every fence!!...

# YdoLhGHSwbRjr 2011/12/27 18:14 http://www.laurenslinens.com

I am getting married on the 15th of November. Congratulate me! Then will be here rarely!...

# vWqkYTaBNt 2012/01/06 21:53 http://www.luckyvitamin.com/c-1084-vitamins-minera

Cool:) I would say say it exploded my brain..!

# burberry watches on sale 2012/10/28 17:22 http://www.burberryoutletonlineshopping.com/burber

Rattling wonderful info can be found on weblog . "The quality of an organization can never exceed the quality of the minds that make it up." by Harold R. McAlindon.
burberry watches on sale http://www.burberryoutletonlineshopping.com/burberry-watches.html

# Burberry Watches 2012/11/03 2:20 http://www.burberrysalehandbags.com/burberry-watch

Great ? I should certainly pronounce, impressed with your web site. I had no trouble navigating through all the tabs as well as related info ended up being truly simple to do to access. I recently found what I hoped for before you know it in the least. Quite unusual. Is likely to appreciate it for those who add forums or anything, website theme . a tones way for your customer to communicate. Excellent task.
Burberry Watches http://www.burberrysalehandbags.com/burberry-watches.html

# t shirt scarf 2012/11/03 2:21 http://www.burberrysalehandbags.com/burberry-scarf

I like this post, enjoyed this one thanks for putting up. "The difference between stupidity and genius is that genius has its limits." by Albert Einstein.
t shirt scarf http://www.burberrysalehandbags.com/burberry-scarf.html

# burberry womens shirts 2012/11/03 2:21 http://www.burberrysalehandbags.com/burberry-women

Some truly fantastic posts on this web site , thanks for contribution.
burberry womens shirts http://www.burberrysalehandbags.com/burberry-womens-shirts.html

# Burberry Ties 2012/11/03 2:21 http://www.burberrysalehandbags.com/burberry-ties.

Somebody necessarily lend a hand to make seriously articles I might state. This is the first time I frequented your website page and so far? I amazed with the research you made to create this actual post extraordinary. Great task!
Burberry Ties http://www.burberrysalehandbags.com/burberry-ties.html

# scarf 2012/11/03 6:11 http://www.burberryoutletscarfsale.com/accessories

I really enjoy looking at on this site, it contains excellent posts. "Beware lest in your anxiety to avoid war you obtain a master." by Demosthenes.
scarf http://www.burberryoutletscarfsale.com/accessories/burberry-scarf.html

# burberry watches on sale 2012/11/03 6:12 http://www.burberryoutletscarfsale.com/accessories

Thankyou for helping out, wonderful info .
burberry watches on sale http://www.burberryoutletscarfsale.com/accessories/burberry-watches.html

# burberry wallets 2012/11/03 6:12 http://www.burberryoutletscarfsale.com/accessories

you are really a just right webmaster. The site loading pace is amazing. It sort of feels that you are doing any distinctive trick. Furthermore, The contents are masterpiece. you have performed a fantastic activity on this topic!
burberry wallets http://www.burberryoutletscarfsale.com/accessories/burberry-wallets-2012.html

# burberry bag 2012/11/03 6:12 http://www.burberryoutletscarfsale.com/burberry-ba

you're really a excellent webmaster. The web site loading velocity is incredible. It kind of feels that you're doing any distinctive trick. In addition, The contents are masterpiece. you've performed a great activity in this subject!
burberry bag http://www.burberryoutletscarfsale.com/burberry-bags.html

# Burberry Ties 2012/11/03 6:12 http://www.burberryoutletscarfsale.com/accessories

Absolutely composed articles , thankyou for entropy.
Burberry Ties http://www.burberryoutletscarfsale.com/accessories/burberry-ties.html

# burberry outlet 2012/11/05 23:26 http://www.burberryoutletonlineshopping.com/burber

Its good as your other blog posts : D, thankyou for putting up. "A lost battle is a battle one thinks one has lost." by Ferdinand Foch.
burberry outlet http://www.burberryoutletonlineshopping.com/burberry-tote-bags.html

# burberry outlet 2012/11/05 23:26 http://www.burberryoutletonlineshopping.com/burber

I gotta favorite this web site it seems very useful very useful
burberry outlet http://www.burberryoutletonlineshopping.com/burberry-men-shirts.html

# mulberry bags 2012/11/07 0:12 http://www.outletmulberryuk.co.uk

Simply wanna input on few general things, The website layout is perfect, the content material is very good : D.
mulberry bags http://www.outletmulberryuk.co.uk

# mulberry handbags 2012/11/07 1:00 http://www.bagmulberry.co.uk/mulberry-handbags-c-9

I got what you intend, thankyou for posting .Woh I am happy to find this website through google. "Those who corrupt the public mind are just as evil as those who steal from the public." by Theodor Wiesengrund Adorno.
mulberry handbags http://www.bagmulberry.co.uk/mulberry-handbags-c-9.html

# sac longchamp 2012/11/08 13:02 http://www.sacslongchamppascher2013.com

But wanna comment on few general things, The website layout is perfect, the subject matter is real excellent. "To establish oneself in the world, one has to do all one can to appear established." by Francois de La Rochefoucauld.
sac longchamp http://www.sacslongchamppascher2013.com

# supra skytop II 2012/11/13 0:56 http://www.suprafashionshoes.com

I have read some good stuff here. Definitely value bookmarking for revisiting. I wonder how so much effort you set to create one of these magnificent informative website.
supra skytop II http://www.suprafashionshoes.com

# Nike Air Max 2012 Mens 2012/11/13 1:55 http://www.superairmaxshoes.com/nike-air-max-2012-

I truly enjoy examining on this web site, it has superb posts. "Never fight an inanimate object." by P. J. O'Rourke.
Nike Air Max 2012 Mens http://www.superairmaxshoes.com/nike-air-max-2012-mens-c-7.html

# Nike Air Max 90 Mens 2012/11/13 1:56 http://www.superairmaxshoes.com/nike-air-max-90-me

Rattling excellent information can be found on blog . "I can think of nothing less pleasurable than a life devoted to pleasure." by John D. Rockefeller.
Nike Air Max 90 Mens http://www.superairmaxshoes.com/nike-air-max-90-mens-c-16.html

# Nike Air Max 95 Womens 2012/11/13 1:56 http://www.superairmaxshoes.com/nike-air-max-95-wo

I was examining some of your content on this internet site and I conceive this website is very instructive! Continue posting .
Nike Air Max 95 Womens http://www.superairmaxshoes.com/nike-air-max-95-womens-c-23.html

# EfUjugRjaatbTqO 2014/07/19 2:11 http://crorkz.com/

kY4zUe Very informative article post.Really looking forward to read more. Really Great.

# omPpHSiGVtwPUfRFOuc 2014/08/05 6:29 http://crorkz.com/

ZEy0k0 Im obliged for the blog article.Thanks Again. Want more.

# XnaUpVTZysE 2014/08/07 11:10 http://crorkz.com/

7h1i4r Very neat blog.Really looking forward to read more. Fantastic.

# コーチ サングラス 2017/08/02 2:31 xjgotbs@outlook.com

私たちの店でのアイテムの最高品質をお楽しみください
100ブランドのコレクション
最高品質のアイテムアウトレットクリアランス販売
工場価格と送料無料で
2017【新商品!】送料無料!
【本物安い】品質100%保証!
【信頼老舗】激安販売中!
【限定価格セール!】激安本物
『今季の新作』【送料無料】
Japan最新の人気、本物保証!
※激安販売※【新入荷】
【正規品.激安】送料無料!
安くて最高の品質、海外通販!
新作登場、2017【爆安通販】
オンラインストア購入する

# ルイヴィトンコピー 2017/08/14 18:34 xmymdc@nifty.com

ブランド バッグ 財布 コピー 専門店
弊社は平成20年創業致しました、ブランドバッグ.財布コピーの取り扱いの専門会社です。
世界有名なブランドバッグ.財布を日本のお客様に届ける為に5年前にこのネット通販サイトを始めました。
取り扱いのブランドバッグ.財布はルイ・ヴィトンコピー、ROLEXコピー、オメガコピー、グッチコピー、
エルメスコピー、シャネルコピー、CHOLEコピー、PRADAコピー、MIUMIUコピー、BALENCIAGAコピー、
DIORコピー、LOEWEコピー、BOTTEGA VENETAコピー等。
全てのブランドバッグ.財布は激安の価格で提供します、
外見と本物と区別できないほど出来が良くて、質は保証できます、弊社のブランドバッグ.財布は同類商品の中で最高という自信があります。
発送前に何度もチェックし、癖のある商品と不良品は発送しません。
我社創業以来の方針は品質第一、
信用第一、ユーザー第一を最高原則として貫きます、安心、安全のサービスを提供致します。
ルイヴィトンコピー http://www.newkokoku.com

# re: [WPF][C#]2D??? 2021/08/07 23:12 hydroxy cloroquine

clorquine https://chloroquineorigin.com/# hydroxyquine side effects

# navpxllmsqnx 2022/05/08 10:48 cqwhbf

antimalarial drug hydroxychloroquine https://keys-chloroquinehydro.com/

# グランドセイコーコピー 2022/10/25 0:11 garskmzpct@softbank.ne.jp

入金後すぐ発送して頂けました。テープをはがしやすくしてくださったり、梱包もとっても丁寧でその気遣いが嬉しかったです。使用感のある商品と記載されていたのですが、思っていた以上に綺麗でびっくりしました。
グランドセイコーコピー https://www.ginza24.com/product/detail/7919.htm

# ロレックスコピー 2023/05/10 18:57 coxAcquic

海外直営店直接買い付け!★ 2023年注文割引開催中,全部の商品割引10% ★ 在庫情報随時更新! ★ 実物写真、付属品を完備する。 ★ 100%を厳守する。 ★ 送料は無料です(日本全国)!★ お客さんたちも大好評です★ 経営方針: 品質を重視、納期も厳守、信用第一!税関の没収する商品は再度無料にして発送します}}}}}}
https://www.bagssjp.com/product/detail-135.html
https://www.bagssjp.com/product/detail-10224.html
https://www.bagssjp.com/menu/menu_product-352.html
https://www.bagssjp.com/product/detail-11365.html
https://www.bagssjp.com/product/detail-449.html

タイトル
名前
Url
コメント