![]() |
Delphi-Version: 5
was macht diese funktion mit einem image?
Hallo, mich würde interessieren, ob ich folgende Aufgabe in der Klausur richtig gelöst habe.
Aufg.: Es soll in einem Satz gesagt werden was folgender Quellcode macht:
Code:
Es wäre schön wenn ihr mir die Aufgabe nicht in einem Satz beantwortet, wie in der Klausur gefordert war, sondern auch kurz erklären könntet was in den einzelnen Zeilen passiert, da ich es verstehen möchte.
[...]
begin filter:=not(clred+clgreen+clblue); FOR i:=0 TO image1.width - 1 do FOR j:=0 TO image1.height -1 do begin x:=image1.canvas.pixels[i,j]; x:=not(x xor filter); image1.canvas.pixels[i,j]:=x; end; end; Und ja, ich habe es auch mal in delphi getestet(mit einem schwarz/weiß bitmap, mit einem bunten bitmap und einfach indem ich sage image1.brush.color:=clred), kann aber keine Regelmäßigkeit erkennen, in dem was er mit image1 macht, außer ganz allgemein: Die Pixel werden verändert. Vielen Dank schonmal! :-D |
AW: was macht diese funktion mit einem image?
Erst wird eine Filterfarbe definiert und dann jedes einzelne Pixel mit dieser Filterfarbe exklusiv verodert. Wo liegt denn das Verständnisproblem?
|
AW: was macht diese funktion mit einem image?
Das Problem liegt darin, dass ich nicht nachvollziehen kann was für eine Farbe herauskommt wenn ich Farbe x mit dem filter exklusiv verodere und das wiederum verneine.
Ist Farbe x an einer Stelle z.B. rot was ist dann die neue Farbe x? also: not (x xor filter) |
AW: was macht diese funktion mit einem image?
Wenn der Windows-Rechner nicht lügt, dann ist die Filterfarbe in Binärdarstellung:
Code:
clRed entspricht
11111111000000000111111100000000
Code:
Wenn man das exklusiv verodert, erhält man
00000000000000000000000011111111
Code:
Welche Farbe das nun genau ist, weiß ich auch nicht.
11111111000000000111111100000000
00000000000000000000000011111111 ================================ 11111111000000000111111111111111 |
AW: was macht diese funktion mit einem image?
Das ist die Negativ-Funktion.
Nur blöd programmiert! Also die erste Zeile mag für Anfänger verwirrend sein: not(clred+clgreen+clblue) = not($FF (rot) + $FF00 (grün) + $FF0000 (blau)) = not($FFFFFF) = $000000 Letzendlich dürfte in filter ne 0 drin stehen. Verxorst du nen beliebigesn Pixel mit $000000 oder $FFFFFF negierst du praktisch die Farbanteile RGB (warum - siehe ![]() |
AW: was macht diese funktion mit einem image?
@Aphton
auf dem Trichter war ich auch kurzzeitig clGreen ist allerdings $8000, ich hatte daraufhin vermutet dass eigentlich clLime gemeint war $FF00 um auf die Maske $FFFFFF zu kommen, diese würde allerdings mit NOT zu $FF000000 um den erwarteten Satz 'Das Bild wird invertiert' zu erreichen müsste die Funktion dann allerdings letztendlich so aussehen
Delphi-Quellcode:
deshalb hatte ich bisher nicht geantwortet ...
Procedure TForm1.flip;
var i, j,filter,x,y: TColor; begin filter:=not(clred+cllime+clblue) ; FOR i:=0 TO image1.width - 1 do FOR j:=0 TO image1.height -1 do begin x:=image1.canvas.pixels[i,j]; x:=not(x xor filter) AND $FFFFFF; image1.canvas.pixels[i,j]:=x; end; end; |
AW: was macht diese funktion mit einem image?
Delphi-Quellcode:
ergibt bei mir FF007F00 und nicht 00000000 bzw. FF000000. Außerdem: wenn ich mit 0 verxore, ändert sich gar nichts.
ShowMessage(IntToHex(not(clred + clgreen + clblue), 8));
Code:
00000111 xor
00000000 ======== 00000111 |
AW: was macht diese funktion mit einem image?
@Deddy:
Ich bins ursprünglich mit $FFFFFF im Kopf durchgegangen und bin aufs invertieren gekommen.. Danach habe ich ohne Denken angenommen, dass dieser Wert invertiert dasselbe tut. Danke.. @Bummi: Scheint so als ob ich heute ganz weit daneben liege ^^ |
AW: was macht diese funktion mit einem image?
Mich würde eher interessieren, ob der mutmaßliche Denkfehler auch bei der Korrektur der Klausur berücksichtigt wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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