- PR -

C#(WPF) 2D図形を描画する方法

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-11-29 21:05
【質問1】(ソースコードを参照願います)
Step1で作成した図形(Ellipse)の書き込み先(オブジェクトX)をどう定義すれば良いか分かりません。
【質問2】
オブジェクトXをBitmapSourceに変換する方法が分かりません。

宜しくお願いします。

【質問の背景】(ソースコードを参照願います)
 WPFを理解するために、2D図形の描画にチャレンジしています。そこで、オブジェクトに対して2D図形を描画し、結果をPNGファイルに保存するサンプルプログラムを試作することにしました。

【サンプルプログラムの処理手順】
Step1 オブジェクトXに対して、2D図形を描画する。
Step2 オブジェクトXをBitmapSourceに変換する。
Step3 BitmapSourceをPNGファイルに保存する。

【サンプルプログラムのソースコード】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
using System.Windows.Shapes;
using System.IO;

namespace WindowsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

// 楕円を描画して、PNGファイルに保存する
// .NET Framework3.0 WPF

int width = 320;
int height = 240;
int stride = width * 4;
byte[] pixels = new byte[width * height * stride];

// ***** 楕円オブジェクトの作成 *****
Ellipse myEllipse = new Ellipse();
myEllipse.Width = 100;
myEllipse.Height = 100;
// ブラシの作成
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = System.Windows.Media.Color.FromArgb(255, 255, 0, 0);
// 塗りつぶし
myEllipse.Fill = mySolidColorBrush;

// ***** ビットマップソースの作成 *****
BitmapSource bmp = BitmapSource.Create(320, 240, 96, 96, System.Windows.Media.PixelFormats.Bgra32, null, pixels, stride);

// ***** 楕円の書き込み *****
// ここで、
// ・楕円をオブジェクトX(オブジェクトXは仮の名前)に描画したい、
// ・オブジェクトXをbitmapSourceに変換したい

// ***** ビットマップソースをpngファイルに保存する *****
BitmapFrame bmpFrame = BitmapFrame.Create(bmp);
FileStream stream = new FileStream(@"c:\data\test.png", FileMode.Create);
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(bmpFrame);
enc.Save(stream);
stream.Close();
}
}
}

【WPF概要】
http://msdn2.microsoft.com/ja-jp/library/ms754130(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/ms748873(VS.80).aspx
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-11-29 23:34
描画可能な BitmapSource 派生クラスは RenderTargetBitmap です。このクラスは Render メソッドを持ち、任意の Visual オブジェクトを自身にレンダリングできます。
ベクタ画像のレンダリングに使用できる Visual 派生クラスは DrawingVisual クラスになります。RenderOpen メソッドを使えば DrawingContext オブジェクトが作られ、各種のベクタ画像や Drawing オブジェクト、ImageSource オブジェクトを描画できます。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-12-03 09:31
Hongliangさん、ご回答ありがとうございます。
描画関連のクラスの関係が把握できなかったので助かります。
上記を参考にして試してみます。
1

スキルアップ/キャリアアップ(JOB@IT)