AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi wie funktioniert das mit der RGB funtion???
Thema durchsuchen
Ansicht
Themen-Optionen

wie funktioniert das mit der RGB funtion???

Ein Thema von Robertlu · begonnen am 24. Feb 2004 · letzter Beitrag vom 24. Feb 2004
Antwort Antwort
Robertlu

Registriert seit: 22. Feb 2004
Ort: Potsdam
35 Beiträge
 
Delphi 7 Enterprise
 
#1

wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 20:46
Hallo

ich hab mal ne frage zur RGB funktion??
wie kriege ich die zahlen für die einzelnen Farben heraus??

also bei der Delphi hilfe ist das nicht ersichtlich

Gruss Robert
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 20:50
Hi,
von einem TColor Wert kannst du mit GetRValue, GetGValue und GetBValue die einzelnen RGB farbwerte zusammensuchen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 20:52
ich würde ausprobieren raten. Bei paint hast du unter 'Palette bearbeiten' alle möglichen Farben bei denen zusätzlich noch ihre RGB-Werte angezeigt werden.

Oder du benutzt die ganzen vorgefertigten Farben wie clblue, clred usw.

Toxman
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 21:38
So schwer ist das nicht.


Zitat:
Wenn Sie zur Festlegung von TColor nicht die Konstanten aus der Unit Graphics, sondern eine 4-Byte-Hexadezimalzahl verwenden, geben die drei niederwertigen Bytes die RGB-Farbintensität für Blau, Grün und Rot an. Der Wert $00FF0000 (Delphi) bzw. 0x00FF0000 (C++) entspricht einem reinen Blau mit voller Intensität, der Wert $0000FF00 (Delphi) bzw. 0x0000FF00 (C++) einem reinen Grün und der Wert $000000FF (Delphi) bzw. 0x000000FF (C++) einem reinen Rot. $00000000 (Delphi) bzw. 0x00000000 (C++) gibt Schwarz und $00FFFFFF (Delphi) bzw. 0x00FFFFFF (C++) Weiß an.
Code:
Blau = $00[color=red]xx[/color]____
Grün = $00__[color=red]xx[/color]__
Rot = $00____[color=red]xx[/color]
Code:
dunkel = 00
...
hell  = FF
Hier mal ein paar Farbwerte:
Delphi-Quellcode:
  clBlack = TColor($000000);
  clMaroon = TColor($000080);
  clGreen = TColor($008000);
  clOlive = TColor($008080);
  clNavy = TColor($800000);
  clPurple = TColor($800080);
  clTeal = TColor($808000);
  clGray = TColor($808080);
  clSilver = TColor($C0C0C0);
  clRed = TColor($0000FF);
  clLime = TColor($00FF00);
  clYellow = TColor($00FFFF);
  clBlue = TColor($FF0000);
  clFuchsia = TColor($FF00FF);
  clAqua = TColor($FFFF00);
  clLtGray = TColor($C0C0C0);
  clDkGray = TColor($808080);
  clWhite = TColor($FFFFFF);

  clMoneyGreen = TColor($C0DCC0);
  clSkyBlue = TColor($F0CAA6);
  clCream = TColor($F0FBFF);
  clMedGray = TColor($A4A0A0);
$2B or not $2B
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#5

Re: wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 21:53
Delphi-Quellcode:
type
  RGBWerte = record
    rot, gruen, blau: int64;
    end;

function RGBSplitten(RGB: int64): RGBWerte;
begin
result.blau := trunc(RGB / sqr(256));
RGB := RGB - result.blau * sqr(256);
result.gruen := trunc(RGB / 256);
RGB := RGB - result.gruen;
result.rot := trunc(RGB / 256);
end;
Auszug aus meiner Bildbearbeitung, so hab ich das gelöst. Geht wunderbar.

MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 22:06
Etwas optimaler könnte der Code schon sein

Delphi-Quellcode:
Var Color: TColor;
  R, G, B: Byte;

{um sicher zu gehn, das auch wirklich ein RGB-Farbwert drin ist}
Color := ColorToRGB(Color);

{TColor aufteilen}        {oder so}   
R := GetRValue(Color); R := Color and $FF;
G := GetGValue(Color); G := (Color shr 8) and $FF;
B := GetBValue(Color); B := (Color shr 16) and $FF;

{und zurück}              {oder so}   
Color := RGB(R, G, B); Color := R or (G shl 8) or (B shl 16);


Int64 auf 'nem 32-Bit-System
Und dann noch solch langsame Funktionen/Befehle ("trunc", "sqr" und "/")


ach ja ... siehe Code-Lib
RGB -> TColor -> RGB
$2B or not $2B
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#7

Re: wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 22:19
Zitat von himitsu:
Etwas optimaler könnte der Code schon sein

Delphi-Quellcode:
Var Color: TColor;
  R, G, B: Byte;

{um sicher zu gehn, das auch wirklich ein RGB-Farbwert drin ist}
Color := ColorToRGB(Color);

{TColor aufteilen}        {oder so}   
R := GetRValue(Color); R := Color and $FF;
G := GetGValue(Color); G := (Color shr 8) and $FF;
B := GetBValue(Color); B := (Color shr 16) and $FF;

{und zurück}              {oder so}   
Color := RGB(R, G, B); Color := R or (G shl 8) or (B shl 16);


Int64 auf 'nem 32-Bit-System
Und dann noch solch langsame Funktionen/Befehle ("trunc", "sqr" und "/")


ach ja ... siehe Code-Lib
RGB -> TColor -> RGB
-Code kann eigentlich immer optimaler sein
-man kann nicht wirklich testen ob die Zahl wirklich ein RGB-Wert sein soll, ist auch gar nicht interessant
-der Code von mir ist lesbarer, bzw man sieht das mathematische dahinter, aber klar sind deine Bit-Operatoren bissel schneller
-int64 wird von Borland empfohlen, außerdem könnte es ja ein 64Bit-System sein dank Athlon64 und WinXP 64Bit-Edition (theoretisch)
-statt trunc kannst auch int nehmen, is vielleicht bissel schneller weil ja nur abgeschnitten wird
-schneller teilen geht nicht, nur mit den Bit-Operatoren mit denen ich grade eben erst angefangen habe

Fazit: Wenn man wissen will was wirklich passiert, finde ich meinen Code schöner. Ist aber Geschmackssache... Und für mein Prog reicht es allemal. Außerdem brauche ich den vordefinierten Typ dort, sonst wäre es viel zu unübersichtlich.

MfG
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: wie funktioniert das mit der RGB funtion???

  Alt 24. Feb 2004, 22:31
Zitat von Jörn:
-Code kann eigentlich immer optimaler sein
... und sollte gerade bei Bildbearbeitung auch sein

Zitat von Jörn:
-man kann nicht wirklich testen ob die Zahl wirklich ein RGB-Wert sein soll, ist auch gar nicht interessant
man kann es glaub ich testen, und man sollte tunlichst auch umwandeln

Zitat von Jörn:
-der Code von mir ist lesbarer, bzw man sieht das mathematische dahinter, aber klar sind deine Bit-Operatoren bissel schneller
ich finde ihn weniger lesbar, da das system der Farbwerte nicht mathematischer, sondern bit-artiger struktur ist. $00BBGGRR <- einfach die worte aneinandergereiht

Zitat von Jörn:
-int64 wird von Borland empfohlen, außerdem könnte es ja ein 64Bit-System sein dank Athlon64 und WinXP 64Bit-Edition (theoretisch)
int64 ist langsamer, und hier nicht nötig. auf einem 64-Bit-System wäre "Integer" von Hause aus 64 Bit breit, und gleichzusetzen mit int64

Zitat von Jörn:
-statt trunc kannst auch int nehmen, is vielleicht bissel schneller weil ja nur abgeschnitten wird
trunc schneidet auch nur ab. round rundet, und ist langsamer

Zitat von Jörn:
-schneller teilen geht nicht, nur mit den Bit-Operatoren mit denen ich grade eben erst angefangen habe
jupp, wie gesagt, Bitoperationen sind nicht nur ein bisschen schnelle...


Zitat von Jörn:
Fazit: Wenn man wissen will was wirklich passiert, finde ich meinen Code schöner. Ist aber Geschmackssache... Und für mein Prog reicht es allemal. Außerdem brauche ich den vordefinierten Typ dort, sonst wäre es viel zu unübersichtlich.



---> nicht bös gemeint, wollte es nur richtig stellen.


herzlichen,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  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 04:29 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