I could solve the problem using a subclass of BitmapSource: BitmapImage has a constructor.
from System.Windows.Media.Imaging import BitmapImage bitmapsrc = BitmapImage() ... bitmapsrc = cam.GetImage(bitmapsrc, timeout) 2013/1/23 Tribble, Brett <btrib...@ea.com> > My personal solution would be to wrap the camera code in a very thin > assembly that manages this stuff and provides a clean interface for > python.net to hook into. I’m lazy that way though…**** > > ** ** > > *From:* PythonDotNet [mailto:pythondotnet-bounces+btribble= > ea....@python.org] *On Behalf Of *Daniel Krause > *Sent:* Tuesday, January 22, 2013 10:08 PM > > *To:* pythondotnet@python.org > *Subject:* Re: [Python.NET] Problem with System.ArgumentException in call > to method from dll**** > > ** ** > > @Brett**** > > ** ** > > When I try**** > > ** ** > > bitmapsrc = BitmapSource()**** > > ** ** > > I get the following error:**** > > ** ** > > Traceback (most recent call last):**** > > File "C:\Users\mdk\workspace\\camera\testbitmap.py", line 8, in <module> > **** > > bitmapsrc = BitmapSource()**** > > TypeError: cannot instantiate abstract class**** > > ** ** > > I will have a look at System.Reflection, thanks for the hint.**** > > ** ** > > @Brad**** > > The documentation does not say anything about "safe" or "unsafe". I do not > have the source for the dll, only for the examples shipped with the dll. If > you would like to have a look at them, I could send them to you.**** > > ** ** > > ** ** > > Daniel**** > > ** ** > > 2013/1/23 b...@fie.us <b...@fie.us>**** > > Just to clarify: neither version of the methods you are calling are marked > "unsafe" in the proper c# .net manner are they? I would not be surprised > to find PythonNet not providing access to "unsafe" methods. I would need > to take a trip through the source to verify. **** > > ** ** > > On Jan 22, 2013, at 4:10 PM, Daniel Krause <m.daniel.kra...@googlemail.com> > wrote:**** > > > > **** > > That is right, I want to get the value of the output parameter.**** > > ** ** > > The following variant looks much more logical to me, but than I get > another error:**** > > bitmapsrc = cam.GetImage(timeout)**** > > TypeError: No method matches given arguments**** > > ** ** > > So it seems that I have to pass the "out"-parameter to the method as well, > but that was not working either.**** > > ** ** > > ** ** > > 2013/1/22 b...@fie.us <b...@fie.us>**** > > You are setting the bitmapsrc variable to be equal to the class > BitmapSource. I assume you mean to get the value of an output parameter, > rather than pass a class object into the method. > > Though I do not speak german. But I think that's it.**** > > > On Jan 22, 2013, at 2:58 PM, Daniel Krause <m.daniel.kra...@googlemail.com> > wrote: > > > I want to use a method from an API to control a camera > (xiApi.NETX64.dll). > > > > The method is described in two ways: > > // > > void GetImage( out WriteableBitmap image, int timeout) > > Description : This function acquires image and returns fills > WritableBitmap object. Supports UNSAFE buffer policy mode. > > Parameters : > > out WriteableBitmap image : WPF BitmapSource to be filled. > > int timeout : Time interval required to wait for the image (in > milliseconds). > > // > > void GetImage(WriteableBitmap image, int timeout) > > Description : This function acquires image and returns fills > WritableBitmap object. Supports SAFE buffer policy mode. > > Parameters : > > WriteableBitmap image : WPF BitmapSource to be filled. > > int timeout : Time interval required to wait for the image (in > milliseconds). > > // > > > > The code in a c#-sample looks like this (I skipped the initialisation of > myCam, but if it helps I can provide the complete code): > > // > > using System.Windows.Media.Imaging; > > int timeout = 10000; > > BitmapSource myBitmapSrc; > > myCam.GetImage(out myBitmapSrc, timeout); > > // > > This code I can compile, and it is working. > > > > I tried to keep the python code as close as possible, but I get errors I > do not understand: > > ## > > import clr > > import sys > > > sys.path.append("C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\WPF") > > clr.AddReference("PresentationCore") > > clr.AddReference("xiAPI.NETX64") > > from xiApi.NET import * > > from System.Windows.Media.Imaging import BitmapSource > > bitmapsrc = BitmapSource > > print bitmapsrc > > cam = xiCam() > > cam.OpenDevice(0) > > cam.SetParam(PRM.BUFFER_POLICY, BUFF_POLICY.SAFE) > > cam.SetParam(PRM.IMAGE_DATA_FORMAT, IMG_FORMAT.MONO8) > > cam.StartAcquisition() > > timeout = 1000 > > bitmapsrc = cam.GetImage(bitmapsrc, timeout) > > cam.StopAcquisition() > > ## > > > > Console output: > > <class 'System.Windows.Media.Imaging.BitmapSource'> > > Traceback (most recent call last): > > File "C:\Users\mdk\workspace\camera\testbitmap.py", > > line 17, in <module> > > bitmapsrc = cam.GetImage(bitmapsrc, timeout) > > System.ArgumentException: Das Objekt mit dem Typ "System.RuntimeType" > kann nicht > > in den Typ "System.Drawing.Bitmap&" konvertiert werden. > > bei System.RuntimeType.TryChangeType(Object value, Binder binder, > CultureInfo > > culture, Boolean needsSpecialCast) > > > > bei System.Reflection.MethodBase.CheckArguments(Object[] parameters, > Binder b > > inder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) > > > > bei System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object > obj, Bind > > ingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo > culture) > > > > bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, > BindingFlags invok > > eAttr, Binder binder, Object[] parameters, CultureInfo culture) > > > > bei Python.Runtime.MethodBinder.Invoke(IntPtr inst, IntPtr args, > IntPtr kw, M > > ethodBase info, MethodInfo[] methodinfo)**** > > > _________________________________________________ > > Python.NET mailing list - PythonDotNet@python.org > > http://mail.python.org/mailman/listinfo/pythondotnet**** > > ** ** > > _________________________________________________ > Python.NET mailing list - PythonDotNet@python.org > http://mail.python.org/mailman/listinfo/pythondotnet**** > > ** ** > > ** ** >
_________________________________________________ Python.NET mailing list - PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet