Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Image einfärben (https://www.delphipraxis.net/179113-image-einfaerben.html)

MoBe13 15. Feb 2014 00:01

Image einfärben
 
Hallo zu später Stunde,
ich versuche mich gerade am Einfärben von Images und habe dazu schon diverse Threads gelesen.
Ich verstehe leider keinen der Quelltexte/Vorgehensweisen, deshalb würde es mich freuen, wenn mir das jemand Schritt für Schritt erklären könnte.
Es wäre super wenn ich angeben kann, wie stark das Image eingefärbt werden soll (in Prozent).
Vielen Dank,
MoBe

himitsu 15. Feb 2014 00:44

AW: Image einfärben
 
Tja, wenn wir jetzt wüssten was du gelesen hast und welche Variante dir gefallen hat und was daran oder wo nun das Problem ist?


Mathe?
neueFarbe = alteFarbe * (100 - Prozent) + neueFarbe * Prozent

MoBe13 15. Feb 2014 00:52

AW: Image einfärben
 
Dieser Bursche ist glaub ich am angenehmsten...
Prozentrechnung beherrsche ich -> jetzt muss ich nur noch den Wert kennen, den ich malträtieren darf

Delphi-Quellcode:
procedure Faerben(C:TCanvas);
var x, y: integer;
  Color: LongInt;
  R, G, B, Gr: Byte;
begin
  with C do
    for x:= ClipRect.Left to ClipRect.Right do
      for y:= ClipRect.Top to ClipRect.bottom do
      begin
        Color:=ColorToRGB(Pixels[x,Y]);

        R := GetRValue(Color);
        G := GetGValue(Color);
        B := GetBValue(Color);

        Gr := Trunc(B*0.11+G*0.59+R*0.3);

        Pixels[x,Y]:=RGB(Gr,0,0);

      end;
end;

himitsu 15. Feb 2014 01:11

AW: Image einfärben
 
Der Code macht aus dem Bild ein Grau-Abbild, aber gibt das nur als Rot-Kanal zurück.

-
Delphi-Quellcode:
Trunc(B*0.11+G*0.59+R*0.3)
= Grau, wie die Augen des Mensch die Farbkanäle in ihrer Helligkeit bewerten
-
Delphi-Quellcode:
RGB(Gr, 0, 0)
statt
Delphi-Quellcode:
RGB(Gr, Gr, Gr)
... Gr = Grau


Du hast schon die einzelnen Farbkanäle R, G und B,
rechnest diese "einzeln" um
und dann kommen sie via
Delphi-Quellcode:
RGB(R, G, B)
wieder zusammen.

PS: Statt mit Prozenten, könnte man hier auch ganzzahlig mit 255, bzw. 256 und via
Delphi-Quellcode:
*
und
Delphi-Quellcode:
div
rechnen, da die Farbkanäle jeweils Werte von 0 bis 255 enthalten.

MoBe13 15. Feb 2014 01:36

AW: Image einfärben
 
Ok danke. Soweit versteh ichs.

Ich hab noch drei Fragen:
Wo weise ich das Image zu? (mit ClipRect?)
und ist es auch möglich die Farbkanäle unterschiedlich 'stark' anzusprechen und somit einen Übergang zwischen Rot und Grün zu schaffen?

und was bezeichnet 'C'?

Delphi-Quellcode:
begin
  with C do

Perlsau 15. Feb 2014 02:07

AW: Image einfärben
 
Zitat:

Zitat von MoBe13 (Beitrag 1247951)
und was bezeichnet 'C'?

Steht doch bereits im Procedure-Kopf:

Delphi-Quellcode:
procedure Faerben(C:TCanvas);
Canvas ist deine Zeichenfläche. Die Klasse TCanvas stellt dir Methoden zum Zeichnen zur Verfügung. Weitergehende Informationen findest du in deiner Onlinehilfe oder z.B. beim Delphi-Treff.

Ich würde übrigens dringend davon abraten, Code aus dem Internet, den man nicht versteht, einfach zu kopieren und in eigene Anwendungen einzubauen, denn dabei lernt man meistens nichts. Als weitaus nachhaltiger hinsichtlich des Erlernens einer Programmiersprache hat es sich erwiesen, entsprechende Tutorials durchzuarbeiten, um die Funktionsweise der Komponenten, Methoden und Klassen, die benötigt werden, auch verstehen zu lernen.

MoBe13 15. Feb 2014 12:04

AW: Image einfärben
 
Danke, ich habe den Procedure-Kopf übersehen...

Ich bin was das Lernen eine Programmiersprache betrifft aus deiner Seite, muss aber gestehen, dass mir für jegliche Grafikfunktionen einfach der Nerv fehlt - möglicherweise kommt das, wenn ich den Rest einwandfrei beherrsche!

Für mein aktuelles Programm brauche ich das allerdings und ich möchte nicht drauf verzichten! Wie ist das mit dem Übergang von 2 Farben? Wäre das mit diesem Code realisierbar?

MoBe13 15. Feb 2014 14:23

AW: Image einfärben
 
Okay es funktioniert alles!
Es wäre super wenn mir jetzt noch jemand den Wert zeigen könnte mit dem ich die Stärke des Filters ändern kann, bzw. den gewünschten Übergang von Rot zu Grün erzeugen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 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