2016-09-01 11 views
1

공용 언어 런타임을 사용하는 IronPython을 사용하여 축소판 이미지를 만들려고합니다.CLR을 사용하여 IronPython에서 축소판 이미지 만들기. 대리자 문제 전달

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

는 당신이 필요 objImageA.GetThumbnailImageAbort(ImageAbortDelegate)입니다 GetImageThumbailAbort의 인스턴스를 만들려면 :

다음은 내 코드입니다. 축소판 이미지를 만들려고하면 일반 정수가 아닌 IntPtr 유형을 전달해야하므로 유형을 가져와야합니다. 가져 오기를 수행하려면 from System import IntPtr이 필요합니다. 마지막에 미리보기 이미지를 만들려면 objThumbImageA = objImageA.GetThumbnailImage(intHeight, intWidth, objThumbAbort, IntPtr(0))과 같은 것이 있어야합니다.

1

완벽하게 작동합니다. 고맙습니다.

더 나은 이해를 위해 ThumbnailImageAbort() 함수로 어떤 일이 일어나고 있는지 설명 할 수 있습니다.

+0

'GetThumbnailImageAbort'는 델리게이트를 생성하기 때문에'Func'에 랩핑 할 필요가 없습니다. – David