atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • プログラミング図書館・本館
  • WPF
  • グラフィックス

グラフィックス

最終更新:2011年09月10日 16:51

atachi

- view
管理者のみ編集可
  • WPF時代のグラフィックス
    • ビジュアルオブジェクト
    • カスタムコントロール
    • WPFでの画像の扱い
    • グラフィックス関連のクラス構成 [#i1cf7c34]
  • レンダリング
    • シェイプ
    • ブラシ
      • ブラシの種類
    • ジオメトリ
      • ジオメトリの描画 [#l2dbcfd6]
  • レンダリング
    • UIのレンダリング
    • ビットマップのレンダリング

WPF時代のグラフィックス

WPFではボタンやツリービューなどのコントロールの外観を描画する方法に新しい方式を取り入れています。
これまでは、グラフィックスとしてピクセルの描画を行っていましたが、WPFではこれらがパスなどを用いたドローイング方式となりました。

ビジュアルオブジェクト

WPFでは描画する領域をビジュアルオブジェクトと呼び、ビジュアルオブジェクトに対し描画関数により図形の描画を行います。

すべてのコントロールは1つから複数のビジュアルオブジェクトの組み合わせで描画されており、コントロール自身もビジュアルオブジェクトです。

ビジュアルオブジェクトは親子関係を構築することができます。
コントロール自身もビジュアルオブジェクトなので、ボタンの文字が表示される場所に画像を表示したり、ツリービューコントロールを表示することもできます。

予め用意されているWPFで使用できるコントロールはFrameworkElementのサブクラスです。

カスタムコントロール

自分で独自のコントロールを作成する場合、ソースコードで定義するにはFrameworkElementのサブクラスとして作成します。

WPFでの画像の扱い

WPFではBitmapSourceのサブクラスを主に扱います。このクラスはWPFのコントロールやスタイルと共に使いやすいように様々なプロパティやインターフェースを持ったものです。

GDI+ではImageクラスを主に扱います。Imageクラスは画像そのものをデータとしてクラスにカプセル化したものでこのクラス自体は画像への操作などは行うことができません。

グラフィックス関連のクラス構成

Object
└ DispathcerObject
└ DependencyObject
└ Freezable
└ Animatable
└ ImageSource
├ BitmapSource
│ ├ BitmapFrame MSDN
│ └ BitmapImage
└ DrawingImage

レンダリング

DrawingVisualは図形などを描画するためのコンテキストや描画した図形情報を格納しています。
実際にDrawingVisualに図形を描画するにはDrawingVisualからDrawingContextを取得します。

DrawingVisual dv = new DrawingVisual();
 
using(DrawingContext dc = dv.RenderOpen()){
	dc.DrawEllipse(Brushes.Red,null,new Point(0,0), 1,1);
}

シェイプ

System.Windows.Shapes名前空間に属した形を描画するためのクラス群です。
シェイプはベクターグラフィックスなので、解像度の変更にもスムーズに適切な解像度で描画されます。

Rectangle 矩形
Ellipse 楕円
Line 直線
Path 曲線
Polygon 多角形
Polyline 閉じていない多角形

PolygonとPolylineは似ていますが、複数の直線で構成された図形がとじているか閉じていないかで異なります。
また、Pathは連続した直線・曲線となります。

ブラシ

// 正方形の矩形
Rectangle rect = new Rectangle();
rect.Width = 75;
rect.Height = 75;
 
// 矩形を単色で塗りつぶす
SolidColorBrush myBrush = new SolidColorBrush(Colors.Red);
rect.Fill = myBrush;

ブラシの種類

SolidColorBrush 単色塗りつぶし
LinearGradientBrush 線形グラデーション塗りつぶし
RadialGradientBrush 円形グラデーション塗りつぶし
ImageBrush 画像による塗りつぶし(拡大・縮小・タイル)
DrawingBrush
VisualBrush

ジオメトリ

ジオメトリはドロー系ソフトの「パス」と考えるとわかりやすい。(Adobe Illustratorなど)

ジオメトリによって描画した図形は、拡大・縮小を行う際にその都度、座標を変えて再描画する必要がない(自動的に計算される)
また、イージングなどのアニメーションが可能で、始点と終点の座標を与えれば中割の描画は自動的に計算され表示される。
このような特徴を持ったジオメトリは、Geometry クラスを基点としたクラスツリーをとる。

図形の描画に関しては、Shapeと同じものが用意されている。

// Create a figure that describes a 
// line from (10,20) to (100,130).
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(10,20);
myPathFigure.Segments.Add(
    new LineSegment(new Point(100,130),
    true /* IsStroked */ ));
 
/// Create a PathGeometry to contain the figure.
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures.Add(myPathFigure);
 
 
// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;
 
canvas1.Children.Add(myPath);

ジオメトリの描画

ジオメトリをVisualObjectに描画するにはUIElementクラスである必要があります。

UIElementのサブクラスであるPathクラスを使用してジオメトリをCanvasに描画するのが一般的です。

// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry; // ジオメトリを設定
 
canvas1.Children.Add(myPath); // XAMLなどで定義したCanvas

レンダリング

画像のレンダリングには、作成する画像の目的によって2種類の方法があります。

1つ目がユーザーインターフェース用の画像の作成です。ユーザーインターフェースではどのような環境でも表示される事が望まれるため、表示環境(DPIなど)に影響されにくいような描画システムを必要とします。

2つ目がビットマップなどの画像を作成するためのレンダリングです。
こちらは主にマルチメディアのための画像です。

それぞれレンダリングするためのクラスが異なります。
前者は、System.Windows.Media名前空間に属しています。
後者は、System.Drawing名前空間に属しており、GDI+とよばれる描画ライブラリのラッパーです。

UIのレンダリング

ボタンなどのフォームコントロールを表示するための画像はDrawingVisualクラスを使用します。
このクラスは画像作成のためのコンテキストを持っており、プログラムによって図形を描画した後、ビットマップとして画像を取得できます。

このコンテキストは画像や図形を描画するためのメソッドを備えているため、簡単に図形を作成することができます。

出来上がるのは1枚のビットマップであるため、マウスイベントなどの処理はできません。

DrawingVisual drawingVisual = new DrawingVisual();
 
// 描画用のコンテキストを取得
DrawingContext drawingContext = drawingVisual.RenderOpen();
 
// 矩形を描画
Rect rect = new Rect(new System.Windows.Point(160, 100), new System.Windows.Size(320, 80));
drawingContext.DrawRectangle(System.Windows.Media.Brushes.LightBlue, (System.Windows.Media.Pen)null, rect);
 
// コンテキストを閉じる
drawingContext.Close();

次のようにすればビットマップとして描画した画像を取り出せます。

RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 120, 96, PixelFormats.Pbgra32);
bmp.Render(drawingVisual);

ビットマップのレンダリング

Bitmap myBitmap = new Bitmap(100, 100); // レンダリングするためのキャンバスを作成します。
                                        // この例では「100×100」の画像を作成します。
 
Graphics g = Graphics.FromImage(myBitmap); // 描画用コンテキストの作成
「グラフィックス」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • dN4_Visual.png

[Amazon商品]


プログラミング図書館・本館
記事メニュー

C#

  • 新機能
  • 言語文法
    • 型
    • 関数
    • クラス
    • 演算子
    • 構文
    • デリゲート
    • イベント
    • 例外処理
    • アトリビュート
    • 名前空間
    • ジェネリクス
  • リフレクション
  • LINQ

.NET Frameworks

  • 数値
  • 文字列
  • 日付時刻
  • オブジェクト
  • コレクション
  • ファイルシステム
  • スレッド
  • データテーブル
  • グラフィックス
  • デバッグ
    • ログ出力
    • ユニットテスト
  • ユーティリティ
  • ネットワーク
    • HTTP
  • デバイス
    • COMポート
  • EntityFrameworks
    • Code First Programming Model
  • デバイスドライバ
    • WinUSB

WPF

  • XAML
  • イベント
  • コマンド
  • スタイル
  • データバインディング
  • コンポーネント
  • グラフィックス
  • カスタムコンポーネント
    • 依存関係プロパティ

アプリケーション

  • 二重起動の防止
  • アンマネージドDLLの読み込み
  • 外部のアプリケーションを起動

VisualStudio

  • 拡張機能
  • カラー設定

ライブラリ

  • WPFToolkit
  • A Fast CSV Reader
  • AvalonDock

実装方法

  • ドラッグアンドドロップ
  • アプリケーション内のドラッグアンドドロップ
  • CSVからDataTable

minecraft

  • Bukkit
  • プラグイン
    • Permissions
    • SlowHealth
    • CookieMonster
    • iConomy
    • WorldGuard
    • Lockette
    • MyHome
    • BorderGuard

サイトについて

プロフィール/リンク/未分類

メモ/ゲーム/Stacks/Omoikane


更新履歴

取得中です。

ここを編集

記事メニュー2

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集

人気記事ランキング
  1. WPF/コンポーネント/コントロール/チェックボックスリストボックス
  2. WPF/グラフィックス
  3. WPF/コンポーネント/コントロール/リストビュー
  4. WPF/スタイル
  5. WPF/データバインディング
  6. WPF/コマンド
  7. CookieMonsterプラグイン
  8. .NET/Code First Programming Model/CTP5
  9. .NET/データテーブル
  10. VisualStudio/拡張機能
もっと見る
最近更新されたページ
  • 4981日前

    Bukkit
  • 4988日前

    トップページ
  • 5009日前

    メニュー
  • 5019日前

    WPF/グラフィックス
  • 5019日前

    .NET/グラフィックス
  • 5019日前

    .NET/グラフィックス/画像の書き込み
  • 5019日前

    .NET/グラフィックス/画像の読み込み
  • 5025日前

    .NET/コレクション
  • 5043日前

    .NET/WinUSB
  • 5077日前

    BorderGuardプラグイン
もっと見る
人気記事ランキング
  1. WPF/コンポーネント/コントロール/チェックボックスリストボックス
  2. WPF/グラフィックス
  3. WPF/コンポーネント/コントロール/リストビュー
  4. WPF/スタイル
  5. WPF/データバインディング
  6. WPF/コマンド
  7. CookieMonsterプラグイン
  8. .NET/Code First Programming Model/CTP5
  9. .NET/データテーブル
  10. VisualStudio/拡張機能
もっと見る
最近更新されたページ
  • 4981日前

    Bukkit
  • 4988日前

    トップページ
  • 5009日前

    メニュー
  • 5019日前

    WPF/グラフィックス
  • 5019日前

    .NET/グラフィックス
  • 5019日前

    .NET/グラフィックス/画像の書き込み
  • 5019日前

    .NET/グラフィックス/画像の読み込み
  • 5025日前

    .NET/コレクション
  • 5043日前

    .NET/WinUSB
  • 5077日前

    BorderGuardプラグイン
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. GTA5 MADTOWN(β)まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. SYNDUALITY Echo of Ada 攻略 ウィキ
  6. ガンダムGQuuuuuuX 乃木坂46部@wiki
  7. ドタバタ王子くん攻略サイト
  8. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  9. パズル&コンクエスト(Puzzles&Conquest)攻略Wiki
  10. MADTOWN @ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  4. ゲームカタログ@Wiki ~名作からクソゲーまで~
  5. 初音ミク Wiki
  6. 検索してはいけない言葉 @ ウィキ
  7. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  8. 発車メロディーwiki
  9. 英傑大戦wiki
  10. SDガンダム ジージェネレーションクロスレイズ 攻略Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 参加者一覧 - MadTown GTA (Beta) まとめウィキ
  3. NERF(ナーフ) - アニヲタWiki(仮)
  4. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  5. Lycoris - MadTown GTA (Beta) まとめウィキ
  6. ぶんぶんギャング - MadTown GTA (Beta) まとめウィキ
  7. 野原育菜(クレヨンしんちゃん) - アニヲタWiki(仮)
  8. FadeGate - ストグラ まとめ @ウィキ
  9. 雑談・交流掲示板 - 星の翼(Starward) 日本語wiki @ ウィキ
  10. 発車メロディー変更履歴 - 発車メロディーwiki
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.