Laden...

Pointerfrage

Erstellt von digi333 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.831 Views
D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 16 Jahren
Pointerfrage

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.

49.485 Beiträge seit 2005
vor 16 Jahren

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

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

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

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo digi333,

ich habe nichts von Get- und SetPixel gesagt.

herbivore

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 16 Jahren

Deswegen mein Zusatz Anfänger (Youngblood).

Meinst du so???


byte tempbyte;
Marshal.Copy(tempByte, 0, pRGB, 1);

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo digi333,

wie ich es mit dem Marshal.Copy meinte, steht doch in den Code, auf den ich verwiesen habe.

herbivore

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 16 Jahren

Nicht böse sein... das geht echt nicht anders oder einfacher???

49.485 Beiträge seit 2005
vor 16 Jahren

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

S
8.746 Beiträge seit 2005
vor 16 Jahren
  1. Arbeite nicht mit dem Umweg über den IntPtr sondern verwende direkt den &-Operator
  2. du musst mit dem fixed-Statement arbeiten (siehe Hilfe)

Zumindest 2. ist ein Fehler, der aber trotzdem nicht für dein Problem verantwortlich sein wird, zumindest dann, wenn der Fehler nicht sporadisch auftritt.

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 16 Jahren

Sind Arrays nicht wesentlich langsamer als Pointer??? Ich arbeite im Videobereich und jeder Geschwindigkeitsverlust hat drastische Auswirkungen.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo digi333,

dann solltest du die Routine wohl besser in C oder C++ schreiben und per DllImport aufrufen.

herbivore