![]() |
bitmap in array einlesen -> zugriffverletzung
hi
ich bin am verzweifeln denn ich bekomm immerwieder zugriffverletzungen wenn ich an der stelle bin
Delphi-Quellcode:
durch die breakpoints konnt ich den fehler auf die zeile zray[x,y] := p^; begrenzen nur weis ich nich was bei der zuweisung von im prinzip gleicher variablen zu einer zugriffverletzung führen kann
vy:=pic^.Height;
vx:=pic^.width; for y := 0 to vy - 1 do begin p := pic^.ScanLine[y]; for x := 0 to vx - 1 do begin zray[x,y] := p^; inc(p); end; end; merkwürdigerweise kommt die fehlermeldung nur, wenn ich am anfang dem bild (pic^) eine größe (mit width und height) zuweise allerdings hab ich ohne diese zuweisung überhaupt kein bild weis jmd zufällig wo die zugriffvverletzung herrührt? hier noch die typen/variablen
Delphi-Quellcode:
var
Zray:picarray; p:^rgbtriple; pic:ptobitmap; vx,vy:integer; type ptobitmap = ^Tbitmap; picarray= array of array of rgbtriple; |
Re: bitmap in array einlesen -> zugriffverletzung
Hast du überhaupt mit SetLength die Array-Größe gesetzt?
|
Re: bitmap in array einlesen -> zugriffverletzung
Setz mal an die Zeile
zray[x,y] := p^; einen Breakpoint und markier "p^" Nun mach einen Rechtsklick und klick auf "Ausdruck am Cursor..." da musst du dann vllt. nochmal p^ eingeben und auf auswerten klicken. Probier das mal! |
Re: bitmap in array einlesen -> zugriffverletzung
was um himmelswillen ist das und was bezweckst du damit?
Delphi-Quellcode:
pic: ptobitmap;
[...] ptobitmap = ^Tbitmap; |
Re: bitmap in array einlesen -> zugriffverletzung
Zitat:
Delphi-Quellcode:
darein schreibt
constructor Thidethread.create(PtoBit: Ptobitmap; text: PAnsiString);
wenn ich nur das normale Tbitmap übergebe kopiert er das und verändert die kopie und ich komm an diese dann nur noch übern umweg ran ich wollte halt direkt auf das selbe bitmap zeichnen.(man muss vlt noch dazusagen das thidethread der thread ist in dem auch der fehler sich befindet)gibts da etwa ne bessere lösung für? @olee was soll da passieren? hab ne englische version weist du wie das dort heißt? ich habs jetzt in die watch list aufgenommen und die werte dadrinn sind 255,255,255 für r,g,b |
Re: bitmap in array einlesen -> zugriffverletzung
Zitat:
Auch ist der Zeiger auf ein TBitmap an sich unsinnig, da Referenzen intern Zeiger sind. Somit baust du dir einen Zeiger auf einen Zeiger - und das willst du definitiv nicht. Von daher die Frage was du damit bezwecken willst. Zitat:
|
Re: bitmap in array einlesen -> zugriffverletzung
@mutzl wenn ich das bitmap innerhalb des threads verwenden will, muss ich doch die im constructor übergebene variable an eine threadinterne variable weitergeben
Delphi-Quellcode:
und da würde er mir doch nur den inhalt des ptobit bitmaps in das pic bitmap schreiben oder nicht?
constructor Thidethread.create(PtoBit: Ptobitmap; text: PAnsiString);
begin pic := PtoBit; end; aber da du grad von handle sprichst das übergeben des handles würde wohl nicht gehen oder? jedenfalls wird das bitmap im hauptthread erzeugt und im contructor übergeben im übrigen muss ich noch asche auf mein haut streuen mit setlength(zray,x,y) kommt nun keine zugriffverletzung mehr diese möglichkeit hatte ich schon ganz vergessen, da bei den anderen array die ich so ausprobiert hab genau diese zeile zu einer zugriffverletzung geführt hat. von daher noch ein dickes Danke an euch... wer allerdings noch nett wenn mir jmd sagt was eine alternative zu meinem ^Tbitmap wäre? |
Re: bitmap in array einlesen -> zugriffverletzung
Zitat:
|
Re: bitmap in array einlesen -> zugriffverletzung
Wenn TBitmap nicht Threadsafe ist bringt das aber rein gar nichts. Zwar werden dann icht die Objectdaten übergeben sondern eben nur ein Pointer auf die Instanzdaten aber wenn du mit dem Object arbeitest werden ja dann doch wieder diese Daten angesprochen (auch beim dereferenzieren wenn man das wirklich machen wöllte). Wenn ein Object also nicht Threadsafe ist kann man es auch nicht über den Umweg von Pointern bearbeiten um es Threadsafe zu machen.
Sinnvoller wäre hier die Verwendung von Handles:
Delphi-Quellcode:
//Dem Thread das Bitmaphandle übergeben
//im Thread: var mybitmap: TBitmap; begin myBitmap := TBitmap.Create(); myBitmap.Handle := uebergebenes_Bitmap_Handle; //now you can work with the bitmap myBitmap.Handle := 0; myBitmap.Free; end; |
Re: bitmap in array einlesen -> zugriffverletzung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz