Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   was macht diese funktion mit einem image? (https://www.delphipraxis.net/173496-macht-diese-funktion-mit-einem-image.html)

mabstudent 28. Feb 2013 09:28

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:
[...]
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;
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.
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

DeddyH 28. Feb 2013 09:34

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?

mabstudent 28. Feb 2013 09:44

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)

DeddyH 28. Feb 2013 09:58

AW: was macht diese funktion mit einem image?
 
Wenn der Windows-Rechner nicht lügt, dann ist die Filterfarbe in Binärdarstellung:
Code:
11111111000000000111111100000000
clRed entspricht
Code:
00000000000000000000000011111111
Wenn man das exklusiv verodert, erhält man
Code:
11111111000000000111111100000000 
00000000000000000000000011111111
================================
11111111000000000111111111111111
Welche Farbe das nun genau ist, weiß ich auch nicht.

Aphton 28. Feb 2013 13:01

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 XOR)

Bummi 28. Feb 2013 13:18

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:
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;
deshalb hatte ich bisher nicht geantwortet ...

DeddyH 28. Feb 2013 13:19

AW: was macht diese funktion mit einem image?
 
Delphi-Quellcode:
ShowMessage(IntToHex(not(clred + clgreen + clblue), 8));
ergibt bei mir FF007F00 und nicht 00000000 bzw. FF000000. Außerdem: wenn ich mit 0 verxore, ändert sich gar nichts.
Code:
00000111 xor
00000000
========
00000111

Aphton 28. Feb 2013 13:35

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 ^^

DeddyH 28. Feb 2013 13:48

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 11:30 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