主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

IronPython: スクリーンキャプチャしてImageオブジェクトで使えるようにする

                
 WindowsでIronPythonを使ってGUIアプリを作りたかったので、Windows Formのサンプルがあったのを、WPFで使えるように書き換えていった。画像を表示したいとき、FormにはPictureBoxというウィジェットがあって、イメージがBitmapならそのままつっこめばよかった。WPFではPictureBoxがなくなって、イメージの扱いは基本的にはImageになっている。そしてこのImageのプロパティSourceに表示したいイメージを入れるのだが、Bitmapを受け付けなくなっており、BitmapSourceなら受け付けてくれる。そんな変換を一発でやってくれるメソッドがBitmapにないかと期待したがそんなものはなかった。

 結局のところ、BitmapオブジェクトをInteropBitmapというオブジェクトに変換してImage.Sourceに入れたところうまく進んだ。

 蛇足だがなんつーか、本当にMATLABが使いやすいものだったと感じる。Pythonだと画像を扱っていても、コロコロとオブジェクトを変えていく必要に迫られる。画像を扱うオブジェクトがいろいろあるために。不便でならないと感じるこの頃。

import clr
clr.AddReference("System")
clr.AddReference("System.Drawing")

from System.Drawing import Bitmap, Graphics, Point, Size
from System.Windows import Window, Application, Int32Rect
from System.Windows.Input import *
from System.Windows.Media.Imaging import BitmapImage, BitmapSizeOptions
from System.Windows.Interop import Imaging
from System.Windows.Controls import Image

image = Image()
bmp = Bitmap(500, 500)
g = Graphics.FromImage(bmp)
g.CopyFromScreen(100, 100, 0, 0, Size(500, 500))
g.Dispose()

source = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions())
image.Source = source

            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。