Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [GELÖST!] Array/Record wird ohne Zugriff gändert! (https://www.delphipraxis.net/58915-%5Bgeloest-%5D-array-record-wird-ohne-zugriff-gaendert.html)

markusj 14. Dez 2005 15:00


[GELÖST!] Array/Record wird ohne Zugriff gändert!
 
Hallo @ all!

Ich code jetzt seit einigen Tagen an einem neuen Projekt für meine Facharbeit, über das ich euch deswegen noch nicht viel sagen kann.
Ich kann nur verraten, dass es etwas mit Bildern und dem BMP Dateiformat zu tun hat.
Deshalb werde ich auch versuchen, so wenig wie möglich von diesem Programm zu Posten (Lehrer können manchmal seeehr kleinlich sein ...), später stelle ich es warscheinlich unter die GNU/GPL und ins Archiv.
Und nun zu meinem Problem: Ich habe einen Record aus den Teilen r,b und g:

--GELÖSCHT--

wird nun zuerst über CleanLayer ein leerer Farbkanal erzeugt.
Ich vermute, dass der Ursprung meiner Probleme schon hier liegt
Aber nun weiter:

--GELÖSCHT--

So, nun das Problem: Wird das Programm ausgeführt (als Beispiel verwende ich ein Bitmap mit 1*1 Pixel größe und den rgb-Werten 255,128,64)
Dann liest die Funktion zuerst den B-Wert (muss so sein, ist bei BMP falschherum gespeichert).
Dieser wird dann dem Blau-Pixel im Record/Array bitmap.data.b abgespeichert, nachedem er vorher über ByteToBits in das Bits-Format konvertiert wurde (die Funktion stelle ich nicht online, die ist aber in Ordnung);
So, jetzt kommt der Hammer: Wird nun der nächste Wert (Grün) eingelesen, so ändern sich folgende Werte:
1. bitmap.data.g[x-1,y-1] --> gewünschter effekt, mehr will ich nicht, aber es geht noch weiter!
2. bitmap.data.b[x-1,y-1] & bitmap.data.r[x-1,y-1] & tmplayer --> ändern sich alle mit dem Grün-Kanal

So, vor lauter schreiben hab ich jetzt noch was vergessen: Diese Änderung tritt auch schon beim Einlesen von bitmap.data.b auf, also schon beim ersten Einlesevorgang.

Meine Schlussfolgerung: Delphi hat die Variablen bitmap.data.r sowie die äquivalenten Ebenen g und b + die "Leerungsebene" tmplayer miteinander Verknüpft. Ändert isch iens, ändern sich die anderen auch.
Und dabei hab ich dich am anfang extra Copy verwendet, damit das nicht passiert :wall:

So, jetzt sei ihr daran. Macht mich fertig, zeigt mir wie blöd ich bin ... (nicht ernst nehmen!)
Aber bitte sag' mir jemand, woran dieses rumgespinne liegt.
Ich programmiere jetzt schon ein Jahr Delphi und ich werd wahnsinnig!

mfG

Markus

PS1: Ich verwende Delphi 2005
PS2: BTW:In einer ähnlichen Situation hat Delphi bei mir auch schon in einer Schleife 1 to 8 runtergezählt ... ich bin bald verrückt geworden.
PS3: Ich finde euer Forum spitze

EDIT: Problem Gelöst, ich nehm den Code wieder aus dem Forum


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz