Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TBitmap färben (https://www.delphipraxis.net/10416-tbitmap-faerben.html)

Florian H 18. Okt 2003 08:58


TBitmap färben
 
Hallo,

für eine Skinfunktion eines meiner Programme hatte ich folgende Idee:
Um das Programm, bzw. den Skin belieibig färben zu können, nehme ich Schwarz-Weiß-Bitmaps für die Controls die ich als Bilder habe und färbe die dann entsprechend ein.
Der User wählt dann einen Farbton und entsprechend werden dann Pixel für Pixel des Bildes, je nach Grauwert, gefärbt.

Aber das will mir irgendwie nicht so recht gelingen!
Ich habe folgendes probiert:
Delphi-Quellcode:
      PixelColor := RGB(round(r*(getRValue(PixelColor) / 255)),
                        round(g*(getRValue(PixelColor) / 255)),
                        round(b*(getRValue(PixelColor) / 255)));
Dabei ist PixelColor die Farbe des S/W-Pixels des Skins und r,g und b sind die aufgeteilten RGB-Werte der Farbe, mit der gefärbt werden soll.

Wenn ich das so mache, funktioniert das aber nicht so richtig, ich kann partout nicht mit einem blauton färben und auch sonst ist die Farbdarstellung nicht richtig...

Gibt es da noch eine gute Möglichkeit?
Wenn einer was mit HLS hat, bitte mit Code, daran bin ich nämlich auch gescheitert...


Viele Grüße
Florian

axelf98 18. Okt 2003 09:01

Re: TBitmap färben
 
Hmm, sind Farbcodes in Delphi nicht so aufgebaut: $ Blau Grün Rot ?
Vielleicht probierst du das einfach mal aus!

Florian H 18. Okt 2003 09:03

Re: TBitmap färben
 
Danke erstmal für die (schier unglaublich) schnelle Antwort, aber....
wenn ich die Codes mit GetRValue(<farbwert>); etc. raushole und entsprechend wieder mit RGB(...); zusammensetzte, sollte das eigentlich schon stimmen...

Florian H 18. Okt 2003 09:20

Re: TBitmap färben
 
Oh mann sorry, hat sich erledigt...
ich hatte wo anders nen fehler drin...

UweG. 18. Okt 2003 09:39

Re: TBitmap färben
 
Hallo Florian,

zur Bewertung der einzelnen Farbkomponenten gibt es die Funktionen

PC := RGB(round(255*(getRValue(PC) / 255)),
round(255*(getGValue(PC) / 255)),
round(255*(getBValue(PC) / 255)));

damit sollte es eigentlich gehen.

MfG. Uwe

Florian H 18. Okt 2003 09:44

Re: TBitmap färben
 
Ja, ich hatte halt ein Graustufenbild, da ist ja R, G und B eh gleich...
Für die die auch so ein Problem haben wie ich hier mal meine Lösung:

Delphi-Quellcode:
procedure TForm5.Faerben(bmpFile : string; color: TColor);
var
  x,y, pixelColor,r,g,b : integer;
  bmp : TBitmap;
begin

  bmp := Tbitmap.Create;
  bmp.LoadFromFile(bmpFile);

  r := GetRValue(color);
  g := GetGValue(color);
  b := GetBValue(color);

  for x:=0 to BMP.Width do
  begin
    for y:=0 to BMP.Height do
    begin
      pixelColor := BMP.Canvas.Pixels[x,y];

      PixelColor := RGB(round(r*(getRValue(PixelColor) / 255)),
                        round(g*(getGValue(PixelColor) / 255)),
                        round(b*(getBValue(PixelColor) / 255)));
      BMP.Canvas.Pixels[x,y] := PixelColor;
    end;
  end;
  bmp.SaveToFile(bmpFile);
  BMP.Free;
end;


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