XAML Do-It-Yourself シリーズ 第 11 回 2D グラフゖックス -1-

Similar documents
XAML Do-It-Yourself シリーズ 第 8 回ゕニメーション -1-

XAMLDo-It-Yourself 第 2 回. レゕウト 今回は XAML でウゖンドウにパネルやボタン メニューなどの基本的なコントロールを配置する方法を 学びます ここでは 次のことを学習します XAML におけるレゕウトの基本 主要なパネルとその記述方法 XAML (WPF) で利用可能な

XAML Do-It-Yourself シリーズ 第 7 回テンプレート -1-

XAML Do-It-Yourself シリーズ 第 12 回 3D グラフィックス -1-

XAML Do-It-Yourself シリーズ 第 1 回 XAML 概要 -1-

WPFの初歩の初歩

PowerPoint プレゼンテーション

piyo0702a.rtfd

Carousel for WPF/Silverlight


PowerPoint プレゼンテーション

グラフィックス 目次

Chart3D for WPF/Silverlight

WPF アプリケーションの 多言語切替

Visual Studio 2010 Ready Day ブレークアウトセッション概要

グラフィックス 目次

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

モデリングとは

新しいイテレーション型開発

画像参照画像送り 5 画像下部に再生ボタンが表示されます 再生ボタンをクリックすると 自動コマ送りされます 1

Microsoft Word - サンプル _図面編集_.doc

Silverlight を使用したデータアプリケーション開発手順

基本作図・編集

基本作図・編集

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

基本作図・編集

<907D945D F D C789C195CF8D5888EA97978CF68A4A97702E786C7378>

クリッピング領域

Autodesk Revit Building 基礎コース

Visual Studio Do-It-Yourself 第 3 回コントロール 今回は Windows ゕプリケーションのユーザーンターフェスを作成する際に使う基本的なコントロ ールについて学びます ここでは 次のことを学習します 主要なコントロールとその機能 XAML を使ったコントロールの配置

< F2D D E6A7464>

Autodesk Revit Structure 2014

DEMO1 まずはやってみよう アクティビティをダブルクリック 作成 - プロジェクト C# => Workflow CodeActivity をぽとぺ シーケンシャルと ステートマシン それぞれのコ ンソールアプリ あとライブラリがある びっくりマークは足りていないあかし プロパティをみると判別で

BarCode for WPF

Microsoft Word - 2.IJCAD Electrical 基本マニュアル.doc

目次 1. アニメーションの軌跡の概要と仕組み 3 2. パノラマ写真にアニメーションの軌跡を設定 まとめ 課題にチャレンジ 19 レッスン内容 アニメーションの軌跡の概要と仕組み アニメーションの軌跡とは スライドに配置したオブジェクト ( テキストや図形 画像など ) を

Processingをはじめよう

PowerPoint プレゼンテーション

// ステージを設定します stage.setscene(scene); stage.settitle(" キャンバス "); // ステージを表示します stage.show(); public static void main(string[] args) launch(args); キャンバス

Word2007 Windows7 暮らしのパソコンいろは 早稲田公民館 ICT サポートボランティア

ARCHITREND ZERO 汎用コマンド一覧

200_CAD(画面回りの機能)の基本操作

アスペクトの相互作用を解消するアスペクトの提案

スライド 1

CocoaDrawingGuide

HOW DO I WebBrowser コントロールで HTML5 を 使用するには ここでは以下の手順で説明します Video 要素を使用する Silverlight と JavaScript の間でやり取りする Canvas 要素を使用する Video 要素を使用する 1. Visual Stu

目次 1. プロフィール画像工房の概要 3 2. プロフィール画像の作成 8 3. プロフィール画像の登録 まとめ 27 レッスン内容 プロフィール画像工房 インターネット上に提供されているさまざまなサービス ( これ以降 サービス と記述します ) を利用するときには 利用するユーザー

YKToolkit.Controls 取扱説明書 Ver YKSoftware

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

Microsoft Word - Grspes…~…j…}…j…–…A…‰6.0.doc

Abstract Kinect for Windows RGB Kinect for Windows v Kinect for Windows v2

MISAO with WPF

208_DM図面作成

CG

manua6.PDF

演習2

PowerPoint プレゼンテーション

Wordの学習

Imaging for UWP

武蔵12_体験版操作説明書(平面図の編集例)

サンプル CSS OutlineAnimation.html の説明 HTML の記述 (OutlineAnimation.html) id 属性 stage の div 要素を作り その中に div 要素でボックスを記述します id 属性 div1 の div 要素を記述し 中にテキストで Out

目次 1. プロフィール画像工房の概要 3 2. プロフィール画像の作成 9 3. プロフィール画像の登録 まとめ 29 レッスン内容 プロフィール画像工房 インターネット上に提供されているさまざまなサービス ( これ以降 サービス と記述します ) を利用するときには 利用するユーザー

ComicStudio4.0ショートカット一覧

ドラフトボードの概要 画面構成 メニュー バー ツール パレット メッセージ ライン ステータス ライン 作図 編集以外の機能がこのメニューから選択できます 作図と編集で利用できるツール パレットです 選択されたツールや操作手順が表示されます 現在の情報が表示されます 数値入力も可能です (1)

padding( パディング ) padding プロパティでボックスの内側の余白を指定します この部分の内側には背景 ( 背景色や背景画像 ) を表示できます border( ボーダー ) border プロパティでボックスの境界線を指定します ボーダーには色 太さ 線の種類を指定できます 画像で

簡単ラベル作成 印刷マニュアル

Microsoft PowerPoint - CSS(Cascading Style Sheets)の基本.pptx

PowerPoint プレゼンテーション

ExtendedLibrary for WPF/Silverlight

Transcription:

XAML Do-It-Yourself シリーズ 第 11 回 2D グラフゖックス -1-

XAML Do-It-Yourself 第 11 回 2D グラフゖックス XAML Do-It-Yourself 第 11 回は 2D グラフゖックスについて学習します XAML を使って作成する WPF ゕプリケーションでは 従来の Windows フォームゕプリケーションと 比較して 2D および 3D グラフゖックスが非常に容易に扱えるようになっています ここでは 2D グラフゖックスついて 次のことを学習します Shape 派生クラスによる基本図形の描画 PathGeometry を使った複雑な図形の描画 ビットマップ画像の表示とエフェクト Shape 派生クラスによる描画 XAML で 2D グラフゖックスを描画する方法はいくつかありますが Shape クラスの派生クラスを使った場合と Geometry クラスの派生クラスを使った場合の 2 つに大きく分けることができます まず Shape クラスの派生クラスを用いるグラフゖックスについて紹介します Shape クラスの派生クラスには 次に示すような基本的な図形が含まれています Shape クラスの派生クラス クラス 概要 Ellipse 楕円 Rectangle 矩形 Line 直線 Polyline 連続した直線 Path 直線や円弧などを複合した図形 Polygon 多角形 この中で Path は直線や円弧を連続して使用し図形を描画するというものですが それ以外の図形は非常 に基本的なものです なお Polygon は Polyline と似ていますが これは連続する直線の始点と終点を 結んだ 閉じた多角形を描画します これらの図形を XAML で記述するのは非常に簡単です 図形を描画したい領域の左上隅を原点として 図 形の座標を指定します なお座標は " デバス独立ピクセル " と呼ばれるピクセル単位で指定を行います 精度は倍精度浮動小数点 (double) です 例えばパネルの原点から (100,100) の位置に直線を描画する場合は 次のように (X1,Y1) = (0,0) と (X2,Y2) = (100,100) を属性で指定します ここでは色や線の太さも指定しています -2-

<Grid> <Line X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" StrokeThickness="3"/> ほかの図形でも同様に 必要な座標を指定することで簡単に描画できます それぞれの図形の例として次 のコードを紹介します <Window x:class="wpfapplication11.mainwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="450"> <Grid ShowGridLines="True"> <Grid.RowDefinitions> </Grid.RowDefinitions> <Grid.ColumnDefinitions> </Grid.ColumnDefinitions> <!-- 1 行 1 列目直線 --> <Line Grid.Row="0" Grid.Column="0" X1="15" Y1="25" X2="80" Y2="80" Stroke="Black" StrokeThickness="3"/> <!-- 1 行 2 列目楕円 --> <Ellipse Grid.Row="0" Grid.Column="1" Width="100" Height="100" Stroke="Green" StrokeThickness="3"/> <!-- 1 行 3 列目矩形 --> <Rectangle Grid.Row="0" Grid.Column="2" Stroke="Red" StrokeThickness="5" Width="100" Height="90"/> <!-- 2 行 1 列目連続した直線 --> <Polyline Grid.Row="1" Grid.Column="0" Margin="10,10,10,10" Stroke="Blue" StrokeThickness="4" Points="0,0 30,60 60,40 90,100" /> <!-- 2 行 2 列目多角形 --> <Polygon Grid.Row="1" Grid.Column="1" Stroke="Black" StrokeThickness="2" Margin="10"> <Polygon.Points> <Point X="0" Y="0"/> <Point X="60" Y="30"/> <Point X="30" Y="60" /> <Point X="70" Y="90" /> <Point X="0" Y="120" /> -3-

</Polygon.Points> </Polygon> <!-- 2 行 3 列目複数の図形 --> <Line Grid.Row="1" Grid.Column="2" Margin="10" X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" StrokeThickness="3"/> <Line Grid.Row="1" Grid.Column="2" Margin="10" X1="100" Y1="0" X2="0" Y2="100" Stroke="Black" StrokeThickness="3"/> <Ellipse Grid.Row="1" Grid.Column="2" Margin="10" Stroke="Orange" StrokeThickness="3"/> </Window> このコードでは Grid パネルを 6 分割して それぞれのセルにさまざまな図形を描画します 実行すると 次のような表示になります <Polyline> 要素では Margin 属性を指定していますが これを指定すると 指定した分だけ原点が移動 します <Polyline> 要素や <Polygone> 要素では座標を複数個指定します この場合の座標の指定方法は 上記の <Polyline> 要素のように Points 属性に座標をスペースで区切って記述することも <Polygone> 要素のように <Polygone.Points> 要素を記述して <Point> 要素で 1 つずつ座標を指定することも可能です -4-

なお Path については 後ほど説明します Geometry 派生クラスを使った描画 Shape の派生クラスによる描画は非常にシンプルですが 複雑な図形を描画する場合は記述が大変です より複雑な図形を描画する場合は Geometry クラスの派生クラスを使って図形を描画します Geometry クラスの主な派生クラスを示します Geometry の派生クラス クラス LineGeometry RectangleGeometry EllipseGeometry PathGeometry StreamGeometry GeometryGroup CombineGeometry 概要直線矩形楕円複合した図形の記述短縮型のパスの記述複数の Geometry をグループ化 Geometry の結合 この中で実際に図形の定義が行えるのは LineGeometry RectangleGeometry EllipseGeometry の 3 つです これらの図形を組み合わせて複雑な図形を作成していきます ただし Geometry の派生クラスは これらの Geometry クラスを使って図形を定義するものの 実際の描画は行いません 描画を行うためには Shape クラスの派生クラスに含まれる Path を利用します この方法で たとえば (0,0) から (100,100) に直線を描画する場合は 次のように記述します <Grid> <Path Stroke="Black" StrokeThickness="3"> <Path.Data> <LineGeometry StartPoint="0,0" EndPoint="100,100" /> </Path.Data> </Path> また PathGeometry を使って複数の基本的な図形を組み合わせた図形を作成することもできます PathGeometry ではさらに LineSegment ( 直線 ) PolylineSegment ( 連続する直線 ) ArcSegment ( 円弧 ) BezierSegment ( ベジエ曲線 ) PolyBezierSegment ( 連続するベジエ曲線 ) などを使って 図形を記述できます この場合も 実際に描画を行うには <Path> 要素を使用します <Window x:class="wpfapplication11.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"> <Grid> <Path Stroke="Blue" StrokeThickness="2"> <Path.Data> -5-

<PathGeometry> <PathGeometry.Figures> <PathFigureCollection> <PathFigure StartPoint="10,100"> <!-- 開始座標 --> <PathFigure.Segments> <PathSegmentCollection> <!-- 図形の指定 --> <LineSegment Point="20,50" /> <ArcSegment Size="100,50" RotationAngle="45" IsLargeArc="True" SweepDirection="CounterClockwise" Point="200,100" /> <LineSegment Point="10,100" /> </PathSegmentCollection> </PathFigure.Segments> </PathFigure> </PathFigureCollection> </PathGeometry.Figures> </PathGeometry> </Path.Data> </Path> </Window> この記述では 直線と円弧を連続して描き さらに始点までを直線で閉じた図形を描画します StreamGeometry を使った描画 上記のような XAML の記述では 要素の階層が深く 分かりにくくなっています そこで同様の図形を 今度は StreamGeometry を使って描画してみます これは次のようになります <Window x:class="wpfapplication11.window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" -6-

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window2" Height="300" Width="300"> <Grid> <Path Stroke="Red" StrokeThickness="2" Data="M 10,100 L 20,50 A 100,50 45 1 0 200,100 L 10,100 Z" /> </Window> StreamGeometry では 描画の指示をコマンドとパラメーターで指定できます 上記の例では 次のよ うな 4 つのコマンドが Data 属性に含まれています M 10,100 L 20,50 A 100,50 45 1 0 200,100 L 10,100 Z "M" は描画開始座標の移動を表します "L" は直線を "A" は円弧を描画します そして "Z" がコマン ドの終了を表します StreamGeometry を利用すると コンパクトに図形を表現できます また 今回は紹介しませんが GeometryGroup を使って複数の図形をグループにまとめたり CombineGeometry を使って 図形を結合したりすることも可能です これらを利用することで さらに 複雑な図形を効率よく描画できます ビットマップ画像とエフェクト 2D グラフゖックスで重要なビットマップ画像の描画についても確認しておきましょう これまでも ListBox による一覧表示で画像を使用しました 画像を描画するには <Image> 要素を用います <Grid> <Image Source="image/Tree.jpg" Width="200" Height="150" Stretch="Uniform"/> 画像は Width 属性と Height 属性で指定した大きさで描画されますが Stretch 属性により描画内容は 変化します Stretch 属性には "None" "Fill" "Uniform" "UniformToFill" の 4 種類が指定できま す "None" は画像をそのまま描画します 描画領域よりも画像が大きい場合は 画像の左上部分のみが描画されます "Fill" は指定した領域に収まるように 画像が縮小 ( 拡大 ) されます 場合によっては画像の縦横の比率が変化します "Uniform" は画像の縦横比を変えないで 指定された領域に収まるサズで描画されます 縦横比によっては 描画されない領域が発生します 最後の "UniformToFill" は 縦横比を変化させないで 指定された領域いっぱいに画像が描画されます この場合は画像の一部が描画されない場 -7-

合があります 以下に実際の描画例を示します なおここでは プロジェクト内の image フォルダーに "Autumn Leaves.jpg" という画像フゔルがあるものとします <Window x:class="wpfapplication11.window3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window3" Height="350" Width="450"> <Window.Resources> <Style TargetType="Image"> <Setter Property="Width" Value="170" /> <Setter Property="Height" Value="100" /> <Setter Property="Source" Value="image Autumn Leaves.jpg"/> </Style> </Window.Resources> <Grid ShowGridLines="True"> <Grid.RowDefinitions> </Grid.RowDefinitions> <Grid.ColumnDefinitions> </Grid.ColumnDefinitions> <StackPanel Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Background="LightGray"> <Label>Stretch=None</Label> <Image Stretch="None" /> <StackPanel Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Background="LightGray"> <Label>Stretch=Fill</Label> <Image Stretch="Fill"/> <StackPanel Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Background="LightGray"> <Label>Stretch=Uniform</Label> <Image Stretch="Uniform"/> <StackPanel Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Background="LightGray"> <Label>Stretch=UniformToFill</Label> <Image Stretch="UniformToFill"/> </Window> このコードを実行すると 4 つの Stretch 属性の指定結果を確認できます -8-

画像のエフェクトまた 画像にさまざまなエフェクトをかけて描画することもできます 画像のエフェクトには ぼかしを行う BlurBitmapEffect 立体的なボタンのように描画する BevelBitmapEffect 影を付ける DropShadowBitmapEffect 画像の回りをぼかす OuterGlowBitmapEffect などが用意されています これらの画像のエフェクトは次のコードで確認できます 実行には画像フゔルが必要です <Window x:class="wpfapplication11.window4" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window4" Height="350" Width="450"> <Window.Resources> <Style TargetType="Image"> <Setter Property="Width" Value="170" /> <Setter Property="Height" Value="100" /> <Setter Property="Source" Value="image Tree.jpg"/> <Setter Property="Stretch" Value="Uniform"/> </Style> </Window.Resources> <Grid ShowGridLines="True"> <Grid.RowDefinitions> </Grid.RowDefinitions> <Grid.ColumnDefinitions> -9-

</Grid.ColumnDefinitions> <StackPanel Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" > <Label>BlurBitmapEffect</Label> <Image > <Image.BitmapEffect> <BlurBitmapEffect Radius="2" KernelType="Box" /> </Image.BitmapEffect> </Image> <StackPanel Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" > <Label>BevelBitmapEffect</Label> <Image > <Image.BitmapEffect> <BevelBitmapEffect BevelWidth="10" /> </Image.BitmapEffect> </Image> <StackPanel Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" > <Label>DropShadowBitmapEffect</Label> <Image > <Image.BitmapEffect> <DropShadowBitmapEffect Color="Gray" ShadowDepth="10"/> </Image.BitmapEffect> </Image> <StackPanel Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" > <Label>OuterGlowBitmapEffect</Label> <Image > <Image.BitmapEffect> <OuterGlowBitmapEffect GlowColor="Black" GlowSize="10" /> </Image.BitmapEffect> </Image> </Window> このコードを実行すると ビットマップ画像に設定された 4 種類のエフェクトが確認できます -10-

まとめ今回は 2D グラフゖックスの基本的な操作と ビットマップ画像の表示について学習しました 複雑な図形を描画する場合は StreamGeometry を利用することで XAML の要素の記述を省略することができます 次回は 3D グラフゖックスについて学習します -11-