2016-09-01 11 views
1

共通言語ランタイムを使用してIronPythonを使用してサムネイルイメージを作成しようとしています。IronPythonでCLRを使用してサムネイルイメージを作成する。デリゲートの問題を解決する

Visual Basicの背景から、私はIronPython内からCLRに委譲された関数を渡すというコンセプトに苦しんでいます。以下は

は私のコーディングです:

import os 
import clr 

# contains Image definition 
clr.AddReference('System.Drawing') 
from System.Drawing import Image 

# contains Action and Func for delegation 
clr.AddReference('System.Core') 
from System import Func 

# open image filename 
objImageA = Image.FromFile('a.jpg') 

# delegated function 
def ImageAbortDelegate(): 
    return False 


objThumbImageAbort = Func[objImageA.GetThumbnailAbort](ImageAbortDelegate) 

# for this example reduce image by 10 percent 
intHeight = objImageA.Height/10 
intWidth = objImageA.Width/10 

# why is this failing? 
objThumbImageA = objImageA.GetThumbnailImage(intHeight, intWidth, objThumbAbort, 0) 
# gives error message TypeError: expected GetThumbnailImageAbort, got Func[GetThumbnailImageAbort] 

答えて

0

GetImageThumbailAbortのインスタンスを作成するには、あなたが必要とするすべてのobjImageA.GetThumbnailImageAbort(ImageAbortDelegate)です。サムネイルイメージを作成しようとすると、通常の整数だけでなく、IntPtr型を渡す必要があります。そのため、型をインポートする必要があります。そのインポートを行うにはfrom System import IntPtrが必要です。最後にサムネイルを作成する場合は、objThumbImageA = objImageA.GetThumbnailImage(intHeight, intWidth, objThumbAbort, IntPtr(0))のようなものが必要です。

1

これは完全に機能します。ありがとうございました。

ThumbnailImageAbort()関数で何が起こっているのかをよりよく理解するために、説明できますか。

+0

'GetThumbnailImageAbort'はデリゲートを作成するので、' Func'でラップする必要はありません。 – David

関連する問題