AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

was macht diese funktion mit einem image?

Ein Thema von mabstudent · begonnen am 28. Feb 2013 · letzter Beitrag vom 28. Feb 2013
Antwort Antwort
mabstudent

Registriert seit: 13. Nov 2010
23 Beiträge
 
#1

was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 09:28
Delphi-Version: 5
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!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 09:34
Erst wird eine Filterfarbe definiert und dann jedes einzelne Pixel mit dieser Filterfarbe exklusiv verodert. Wo liegt denn das Verständnisproblem?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mabstudent

Registriert seit: 13. Nov 2010
23 Beiträge
 
#3

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 09:44
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)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 09:58
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 13:01
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)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (28. Feb 2013 um 13:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 13:18
@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 ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 13:19
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 13:35
@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 ^^
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: was macht diese funktion mit einem image?

  Alt 28. Feb 2013, 13:48
Mich würde eher interessieren, ob der mutmaßliche Denkfehler auch bei der Korrektur der Klausur berücksichtigt wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 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