byte leftPixel = 0;
IntPtr Scan0rgb = rgbData.Scan0;
void* picout = (void*)rgbData.Scan0;
// Outputpointer
byte* pRGB = (byte*)(void*)Scan0rgb;
//... mache irgendwas mit pRGB
pRGB[0] = 128;
// Das geht nicht!
leftPixel = pRGB[0];
Der ganze Quellcode wär zu lang deswegen hab ich die Schleifen und alles drum herum weg gelassen. Es kommt ein Fehler im Programm raus bei der Übergabe zu leftPixel. Scheinbar kann ich den Pointerwert nicht übergeben. Ne Idee???
Falls jemand den Quellcode sehen will... Problem in Zeile 88-89.
Hallo digi333,
Es kommt ein Fehler im Programm raus bei der Übergabe zu leftPixel.
Nach 47 Beiträgen könntest du es wissen. 🙂 Welcher Fehler? [Hinweis] Wie poste ich richtig? Punkt 5.
herbivore
Ich kann leider nicht Debuggen, da ich die Ausgabe in einer Delphi-Umgebung habe. Ohne die Zeile 88 funktioniert es soweit auch, deswegen ist es bestimmt nur ein Übergabefehler.
Resharper und Compiler meckern nicht, aber die Ausgabe bleibt leer.
Hallo digi333,
mach es doch lieber safe, indem du Marshal.Copy verwendest, siehe NET 1.1: Bitmap, Graphics, Handle: Problem mit 8-bit-Pixel .
herbivore
Ich möchte ehrlich gesagt nicht den Umweg machen über Bitmaps und SetPixel und GetPixel. Mir würde es reichen zu wissen warum ich den Inhalt des Pointer nicht speichern kann.
By the way... immernoch blutigster Anfänger.
Hallo digi333,
ich habe nichts von Get- und SetPixel gesagt.
herbivore
Deswegen mein Zusatz Anfänger (Youngblood).
Meinst du so???
byte tempbyte;
Marshal.Copy(tempByte, 0, pRGB, 1);
Hallo digi333,
wie ich es mit dem Marshal.Copy meinte, steht doch in den Code, auf den ich verwiesen habe.
herbivore
Hallo digi333,
hm, also sich mit einem Methodeaufruf den Speicherbereich, auf den man sonst per Pointer zugreifen würde, in ein verwaltetes Array zu kopieren, um dann mit verwalteten Operationen zugreifen zu können, finde ich wirklich nicht kompliziert. Am Ende muss man das Array natürlich in den ursprünglichen Speicherbereich zurückkopieren.
Also letztendlich zwei Methodeaufrufe, um unsafe zu vermeiden. Weiß nicht, was daran kompliziert sein soll.
herbivore
Zumindest 2. ist ein Fehler, der aber trotzdem nicht für dein Problem verantwortlich sein wird, zumindest dann, wenn der Fehler nicht sporadisch auftritt.
Sind Arrays nicht wesentlich langsamer als Pointer??? Ich arbeite im Videobereich und jeder Geschwindigkeitsverlust hat drastische Auswirkungen.
Hallo digi333,
dann solltest du die Routine wohl besser in C oder C++ schreiben und per DllImport aufrufen.
herbivore