P
So, ich habe jetzt mit einer Nacht drüber schlafen rausgefunden, dass noch ein imgMem = IntPtr(m_pcImageMemory) fehlte damit aus einem pointer, der einfach global als char* m_pcImageMemory deklariert ist, ein System::IntPtr wird.
Das Problem ist jetzt immernoch, dass bei Marshal::Copy entweder Quelle oder Ziel ein cli::array ist. Ich habe aber jetzt aber zwei System::IntPtr. Einer zeigt dahin, wo der Kameratreiber das Bild kopiert und der andere zeigt dahin, wo ich das System::Drawing::Bitmap nach dem LockBits seinen Bildinhalt herbezieht.
Ich kopiere das ganze jetzt erst vom "Kameraspeicher" in ein cli::array und dann wieder in den "Anzeigespeicher" meines System::Drawing::Bitmap.
// lock setzen
bmpDaten=gdiBild->LockBits
(rect,
System::Drawing::Imaging::ImageLockMode::ReadWrite,
System::Drawing::Imaging::PixelFormat::Format32bppRgb);
//pointer machen
bmpDatenPtr = bmpDaten->Scan0;
imgMem = IntPtr(m_pcImageMemory);
//kopiere ungemanagte Daten ins bmp
System::Runtime::InteropServices::Marshal::Copy(imgMem,dataArray,0,resx*resy*4);
System::Runtime::InteropServices::Marshal::Copy(dataArray,0,bmpDatenPtr,resx*resy*4);
gdiBild->UnlockBits(bmpDaten);
Das geht zwar jetzt in brauchbarer Geschiwndigkeit, scheint mir aber nicht die optimale Lösung zu sein.
Es müsste doch irgendwie möglich sein die Bilddaten, die von der Kamera kommen und im Speicher liegen, in einem Zug in das System::Drawing::Bitmap zu kopieren.
Gruß
predator