AGB  ·  Datenschutz  ·  Impressum  







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

Farbwert verdunkeln bzw. aufhellen

Ein Thema von Opa Knack · begonnen am 31. Jan 2005 · letzter Beitrag vom 1. Feb 2005
Antwort Antwort
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#1

Farbwert verdunkeln bzw. aufhellen

  Alt 31. Jan 2005, 13:35
Hallo,

diese Frage ist zwar schon x-Mal gestellt worden, aber die Antworten kann ich alle nicht umsetzen:

Ich möchte gerne eine "Hell-Dunkel"-Scrollbar vglb. dem Standard-Windows-Farbauswahldialog erstellen, sprich von einer beliebigen Farbe ausgehend deren Abstufungen hin zu Weiß bzw. Schwarz darstellen und auswählen können.

Gibt es für sowas eine Komponente? Oder kann ich den Source dazu irgendwo finden? Vieles von dem, was ich bisher gefunden habe, verfolgt zwar die gleiche Idee, aber die Umsetzung ist trotzdem jedesmal anders.

Danke
Opa
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Farbwert verdunkeln bzw. aufhellen

  Alt 31. Jan 2005, 13:44
Aufhellen beziehungsweise Abdunkeln ist leichter, als manche denken
Das Prinzip ist folgendes: Zu jeder Komponente (Rot, Grün, Blau) der Farbe wird ein Wert hinzugefüg oder abgezogen. Hier mal ein Beispielcode:
Delphi-Quellcode:
function Darken(C: TColor): TColor;
var T: TColor;
begin
  T := ColorToRGB(C);
  Result := ((T and $FF) + $01) or ((T and $FF00) + $0100) or ((T and $FF0000) +$010000);
end;
Keine Funktionalität garantiert
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Farbwert verdunkeln bzw. aufhellen

  Alt 31. Jan 2005, 13:46
Zitat von Dax:
Aufhellen beziehungsweise Abdunkeln ist leichter, als manche denken
So leicht dann doch nicht Mann sollte nicht alle Werte gleichmäßig (an 255) behandeln, sondern prozentual vom Ausgangswert, sonst gibt es eine unangenehme Verschiebung des Hue.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Farbwert verdunkeln bzw. aufhellen

  Alt 31. Jan 2005, 14:05
Ich hätte da eine Idee, wie mann das realisieren kann:
Delphi-Quellcode:
function Dunkel(farbe: TColor; prozent: Byte): TColor;
var c: array [0..2] of Byte;
    i: Integer;
begin
 c[0]:= (farbe and $FF);
 c[1]:= (farbe and $FF00) shr 8;
 c[2]:= (farbe and $FF0000) shr 16;
 for i:= 0 to 2 do
  c[i]:= (c[i]* prozent) div 100;
 Result:= c[0] + (c[1] shl 8) + (c[2] shl 16);
end;
Der Parameter Prozent muss dabei im Bereich von 0..100 liegen und gibt das Maß der Abdunklung an. Bei 0 ist der Rückgabewert schwarz, bei 100 die Farbe selbst, und sonst halt dazwischen.
(Achtung: ungetestet!)

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Farbwert verdunkeln bzw. aufhellen

  Alt 31. Jan 2005, 17:28
Analog dazu kann man Farben heller machen:
Delphi-Quellcode:
function Heller(farbe: TColor; prozent: Byte): TColor;
var c: array [0..2] of Word;
    i: Integer;
begin
 c[0]:= (farbe and $FF);
 c[1]:= (farbe and $FF00) shr 8;
 c[2]:= (farbe and $FF0000) shr 16;
 for i:= 0 to 2 do begin
  c[i]:= (c[i]* (100 + prozent)) div 100;
  if c[i]>255 then c[i]:= 255;
 end;
 Result:= c[0] + (c[1] shl 8) + (c[2] shl 16);
end;
Prozent liegt hier im Bereich von 0 bis 255. Bei einem Wert von 0 erhält man die Farbe selbst, bei 100 ist das Ergebnis eine doppelt so helle Farbe. (ebenfalls ungetestet)

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#6

Re: Farbwert verdunkeln bzw. aufhellen

  Alt 31. Jan 2005, 21:00
Hab mich heute mal intersssehalber hingesetzt, um das zu optimieren

Herausgekommen sind folgende Funktionen (Mit Unterstützung von Dax und Muetze1!)

Eregbnise der Zeitmessung für 1 Million Durchläufe:
Binärbaum's Funktion: 109 ms
Pascal Funktion: 94 ms (Darken())
Assembler-Funktion: 63 ms (Darken2())

Die Funktionen:
Delphi-Quellcode:
function Darken(Value: TColor; Percentage: Byte): TColor;
type PP = ^DWord;
var Buffer: Array[0..3] of Byte;
    I: Integer;
begin
  PP(@Buffer)^ := Value;
  for I:=0 to 2 do
    Buffer[I] := (Buffer[I] * Percentage) DIV 100;
  Result := PP(@Buffer)^;
end;

function Darken2(Value: TColor; Percentage: Byte): TColor;
var Buffer: Array[0..3] of Byte;
asm
  PUSHA

  MOV EBX, Value
  XOR ECX, ECX
  MOV CX, 3
  @@CLC:
    MOV AL, BL
    MUL Percentage
    MOV DL, $64
    DIV DL
    MOV byte ptr buffer[3], al
    SHR buffer, 8
    SHR EBX, 8
  LOOP @@CLC

  POPA

  MOV EAX, Buffer
end;
Mit dem Heller machen ist das Leider nicht so einfach.

Gruß, Moritz
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Farbwert verdunkeln bzw. aufhellen

  Alt 1. Feb 2005, 20:32
es gibt auch eine Delphi-Funktion: Hier im Forum suchenColorAdjustmentLuma aus der unit graphutil. hier gehen die Abdunklungen/Aufhellungen richtig in der Farbe weiter und eneden nicht in einem grau/weiß-matsch.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  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 23:03 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