Autor |
Beitrag |
en!gma
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Do 19.05.05 15:06
hi.
wollte mal fragen ob es möglich ist, von einem bmp oder einem jpg den farbton zu ändern?
also ich möchte, dass alles das, was weiss ist, seine farbe ändert, zu einem farbton, den ich selbst angeben kann.
schwarz soll halt immer schwarz bleiben.
hmm hier mal ein kleines bild, villeicht ist es dann einfacher zu verstehen.
mfg
enigma
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 19.05.05 15:08
Mit Zwischentönen oder nur die eine Farbe? SCANLINE: auslesen und bei Bedarf einfach ersetzen
AXMD
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Do 19.05.05 15:10
also es ist jetzt nur in meinem beispiel schwarz/weiss.
ich dachte eher an alle schwarz/weiss töne.
und halt nur ganz schwarz soll sich nicht ändern.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 19.05.05 15:13
en!gma hat folgendes geschrieben: | also es ist jetzt nur in meinem beispiel schwarz/weiss.
ich dachte eher an alle schwarz/weiss töne.
und halt nur ganz schwarz soll sich nicht ändern. |
Willst du die anderen auch ersetzen oder nur ein bisschen mehr rosa bzw. rot machen? Was ist das Kriterium für Zwischenfarben? Bei Schwarz/Weiss sind es alle Graustufen, also von (1,1,1) [0,0,0 nicht - das is ja schwarz] über (127,127,127) bis (255,255,255). Und was bei den anderen Farben?
AXMD
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Do 19.05.05 15:18
also nur 0,0,0
soll nichts verändern.
alles darüber soll schon verändert werden.
wenn das bild ganz weiss ist, soll es halt zB mit meineProzedur(255,0,0) ganz rot werden.
hat das bild zB einen schwarz-weiss übergang, soll es schwarz-orange-rot werden.
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Do 19.05.05 19:14
ok ich hatte grade eine idee, weiss aber nicht, ob das so klappen kann.
also ich habe einmal mein schwarz/weiss bild, und einmal ein bild, dass meine farbe enthält.
zB rot.
nun ist mein schwarz/weiss bild hmm naja ich würd es fast alphamap nennen.
alles was nicht schwarz ist, wird um so und soviel prozent überdeckt.
könnte das so klappen?
wenn ja, hat jemand ne idee wie?
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 19.05.05 19:23
Kommt immer auf die Anwendung draufan. Was soll z.B. mit grün oder blau werden? Eine einfache Möglichkeit wäre, alle Blau- und Grüntöne wegzulassen, dann ist alles Rot-Schwarz. Aber eben, bevor man eine Umrechnung angeben kann, muss man sich im klaren sein, wass man genau will.
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Do 19.05.05 19:36
es soll halt mit allen rgb farben funktionieren.
mit rot war nur ein beispiel
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 19.05.05 20:01
Und was passiert mit blau, wenn ich jetzt grün rot machen will? Ich mein, eine eindeutige Antwort gibt's nicht.
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Do 19.05.05 20:04
also das standardbild ist IMMER
schwarz/weiss.
und da soll man jetzt einfach weiss/grau durch eine vorher festgelegte farbe ersetzen können.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 19.05.05 20:10
Wenn das der Fall ist, solltest du mal nach einer Umrechnung der Farbwerte im RGB-Format nach HSV (Helligkeit, Sättigung, Farbton) und zurück suchen.
Dann kannst du einen Farbton (grün, blau, violett, etc.) und eine Sättigung (knallig bis pastell) angeben, und je nach Grauwert die Helligkeit ändern. Diese Werte dann zurückrechnen ins RGB-Modell und dem Pixel zuweisen.
_________________ We are, we were and will not be.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 20.05.05 03:00
Rechne den Grauwert in den Bereich 0..1 um, und multiplizier diesen Grauwert einfach mit der gewünschten Farbe (z.B. 128,192,96).
|
|
Phantom1
      
Beiträge: 390
|
Verfasst: Fr 20.05.05 08:34
genau wie delfiphan sagte, hier mal ein beispiel:
Ich hab den Code jetzt nicht getestet, hab ihn einfach so aus dem Kopf heraus geschrieben.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Farbton(src: TBitmap; r, g, b: Byte); var p: TRGBTriple; i: Integer; grau: Double; begin src.PixelFormat:=pf24bit; p:=src.ScanLine[src.Height-1]; for i:=1 to src.Width*src.Height do begin grau:=p.rgbtRed / 255; p.rgbtRed:=Round(r * grau); p.rgbtGreen:=Round(g * grau); p.rgbtBlue:=Round(b * grau); Inc(p); end; end; |
MfG
Phantom1
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Fr 20.05.05 14:17
ok danke, das werd ich mal ausprobieren
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 21.05.05 16:15
ok habs grad mal so ausprobiert, aber leider ohne erfolg.
da ich mich mit diesen farbsachen erhlichgesagt garnicht auskenne,
poste ich einfahc mal die fehler die er ausspuckt:
also er sagt, dass
Delphi-Quelltext 1:
| p:=src.ScanLine[src.Height-1]; |
und
Delphi-Quelltext
nicht zusammenpassen.
also
Incompatible types: 'tagRGBTriple' and 'Pointer'
kann ich src.ScanLine[src.Height-1] irgendwie in ein trgbTriple umwandeln?
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 21.05.05 16:33
EDIT: so ich habs:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm1.Button1Click(Sender: TObject); var x, y: integer; r1, g1, b1, r2, g2, b2, r3, g3, b3: integer; color: Tcolor; begin color := clred; for x := 0 to image1.Width do for y := 0 to image1.Height do begin r1 := getrvalue(image1.Canvas.pixels[x,y]); g1 := getgvalue(image1.Canvas.pixels[x,y]); b1 := getbvalue(image1.Canvas.pixels[x,y]); r2 := getrvalue(color); g2 := getgvalue(color); b2 := getbvalue(color); r1 := 255 - r1; g1 := 255 - g1; b1 := 255 - b1; r3 := (r2 * r1); g3 := (g2 * g1); b3 := (b2 * b1); image2.Canvas.pixels[x, y] := RGB(r3, g3, b3); end; end; |
Zuletzt bearbeitet von F34r0fTh3D4rk am Sa 21.05.05 17:03, insgesamt 1-mal bearbeitet
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 21.05.05 16:53
ok thx erstmal, aber was genau macht jex diese prozedur?
habs mal mit nem normalen schwarz weiss bild ausprobiert, und
wenn ich das knöpfchen drücke kommt ein komplett einfarbig rotes bild raus : )
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 21.05.05 16:54
ist dein bild komprimiert ?
bei mir klappts wunderbar
Die Prozedur mischt rot rein ^^  color auch durch grün ersetzbar
Zuletzt bearbeitet von F34r0fTh3D4rk am Sa 21.05.05 16:58, insgesamt 1-mal bearbeitet
|
|
Phantom1
      
Beiträge: 390
|
Verfasst: Sa 21.05.05 16:57
en!gma hat folgendes geschrieben: | ok habs grad mal so ausprobiert, aber leider ohne erfolg.
da ich mich mit diesen farbsachen erhlichgesagt garnicht auskenne,
poste ich einfahc mal die fehler die er ausspuckt:
also er sagt, dass
Delphi-Quelltext 1:
| p:=src.ScanLine[src.Height-1]; |
und
Delphi-Quelltext
nicht zusammenpassen.
also
Incompatible types: 'tagRGBTriple' and 'Pointer'
kann ich src.ScanLine[src.Height-1] irgendwie in ein trgbTriple umwandeln? |
OK, wie gesagt, ich hatte den Code nicht getestet.
Du musst die Variablendeklaration ändern, von "p: TRGBTriple;" in "p: PRGBTriple";
Hier nochmal der Complette Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Farbton(src: TBitmap; r, g, b: Byte); var p: PRGBTriple; i: Integer; grau: Double; begin src.PixelFormat:=pf24bit; p:=src.ScanLine[src.Height-1]; for i:=1 to src.Width*src.Height do begin grau:=p.rgbtRed / 255; p.rgbtRed:=Round(r * grau); p.rgbtGreen:=Round(g * grau); p.rgbtBlue:=Round(b * grau); Inc(p); end; end; |
mfg
Phantom1
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 21.05.05 16:59
mit jpeg wirst du glaube ich probleme bekommen, muss ich mal testen
edit: jo ziemliche
also immer schön bitmaps verwenden dann funzt mein code auch 
|
|