![]() |
TRGBTriple
Hi Leute!
Ich habe eine Frage zu TRGBTriple. Ich habe eine Variable, die als ^TRGBTriple deklariert wird. Wenn ich Scanline verwende, weise ich der Variablen damit eine Zeile oder einen Pixel zu? Was bewirkt inc(Variable) in diesem Fall? danke für eure Antworten! |
AW: TRGBTriple
Ein Zeiger auf 3 Byte für ein Bitmap mit dem Pixelformat pf24bit, ein inc setzt ihn um 3 Byte weiter also auf das nächste "Pixel".
|
AW: TRGBTriple
Delphi-Quellcode:
Und nun einfach den Scanline-Pointer nach PRGB casten.
type
TRGBRec = packed record R, G, B: Byte; end; // oder war's B,G,R ? TRGBArr = array[0..0] of TRGBRec; PRGBArr = ^TRGBArr; Das Ergebnis ist nun ein Array aller Pixel der gewählten Zeile.
Delphi-Quellcode:
Und natürlich nicht das pf24bit vergessen.
var
P: PRGBArr; Pixel: TRGBRec; P := PRGBArr(b.Scanline[x]); Pixel := P^[y]; // das ^ ist in Delphi nicht unbedingt nötig Pixel := P[y]; Pixel := PRGBArr(b.Scanline[x])[y]; |
AW: TRGBTriple
Hab ich das so richtig verstanden? :
Scanline weißt einer Variablen eine ganze Zeile einer bmp zu. Durch inc wird immer der nächste Pixel dieser Zeile genommen. |
AW: TRGBTriple
Jupp.
Inc auf einen typisierten Zeiger angewendet, setzt diesen auf den nächsten Wert. aus
Delphi-Quellcode:
wird delphiintern quasi
Inc(P);
Delphi-Quellcode:
, bzw. sowas Ähnliches wie
Inc(P, SizeOf(P^));
Delphi-Quellcode:
.
P := Pointer(Integer(P) + SizeOf(P^));
|
AW: TRGBTriple
Alles klar, danke!
|
AW: TRGBTriple
Zitat:
Delphi-Quellcode:
. Man sollte daher die obere Grenze nicht 0, sondern wesentlich größer setzen, sodass die Bereichsprüfung nicht zuschlagen kann.
TRGBArr = array[0..0] of TRGBRec;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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-2025 by Thomas Breitkreuz