AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi bmp->graustufen mit canvas

bmp->graustufen mit canvas

Ein Thema von XeRo · begonnen am 18. Aug 2005 · letzter Beitrag vom 21. Aug 2005
Antwort Antwort
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#1

bmp->graustufen mit canvas

  Alt 18. Aug 2005, 18:53
hi...ich möchte in einem TImage ein bild in graustufen umwandeln...hab leider trotz viel herumgetüftel nur schwarz weiß zusammengrbracht...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: bmp->graustufen mit canvas

  Alt 18. Aug 2005, 18:55
hier gibts die Lösung: http://www.dsdt.info/tipps/?id=648
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: bmp->graustufen mit canvas

  Alt 18. Aug 2005, 18:57
RGB-Farbe in Grauwert umrechnen (sinngemäß):
Delphi-Quellcode:
V := (Red + Green + Blue) div 3;
Pixel.Red := v;
Pixel.Green := v;
Pixel.Blue := v;
Allerdings ist das farbpsüscholojisch nicht absolut korrekt. Aber mir hat das bisher gereicht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: bmp->graustufen mit canvas

  Alt 18. Aug 2005, 18:59
das ging mal wieder sehr schnell


wenn wir schon dabei sind...gibts für den sepia effekt oder wie der heißt auch so eine einfache lösung?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: bmp->graustufen mit canvas

  Alt 18. Aug 2005, 19:47
Bestimmt, der Sepia-Effekt ist ja nichts anderes als eine Sw-Darstellung mit einem 'Touch' von Braun.
Einfach mal mit RGB spielen: Mach Dir doch drei Scrollbars für R,G und B und schau mal, wie so ein Bitmap sich verhält.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#6

Re: bmp->graustufen mit canvas

  Alt 18. Aug 2005, 21:04
ich benutze immer diese Formel:
Code:
SW = R * 0.297 + G * 0.589 + B * 0.114;
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: bmp->graustufen mit canvas

  Alt 19. Aug 2005, 08:32
Zitat von alzaimar:
Einfach mal mit RGB spielen: Mach Dir doch drei Scrollbars für R,G und B und schau mal, wie so ein Bitmap sich verhält.
Gute idee...
naja...Danke an alle...hat mir sehr geholfen...funktioniert alles super
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: bmp->graustufen mit canvas

  Alt 21. Aug 2005, 11:09
ich hab bisschen mit dem Sephia rum probiert und hatte dort anfänglich das problem das ja ein reines weiß nicht mit rot vermischt wird. Irgnedwann kam dann die Idee das der Graustufenwert ja das Mischverhältnis mit dem Braunwert angeben könnte und ein zweiter wert das maximale Gegenteil festlegt.. Wäre nett wenn ihr mal probieren könntet ob die Funktion den Sephia-effekt hinbekommt. Wenn dem nicht so ist wäre eine genaue Fehlerbeschreibung ganz nett - also ungefähr: es ist zu rot - oder: ein reines weiß dürfte nicht so sehr eingefärbt werden etc.

Nicht vergessen die Unit "math" einzubinden.
Delphi-Quellcode:
procedure RGBToSephia(ASource: TGraphic; ADest: TBitmap);
var LBitmap: TBitmap;
    LCountY, LCountX: Integer;
    LPixS, LPixD: PRGBTriple;
    LByte, LIntensity1, LIntensity: Byte;
    LBlendColor: TRGBTriple;
begin
  LIntensity1 := 190;
  LBlendColor.rgbtBlue := 0;
  LBlendColor.rgbtGreen := 64;
  LBlendColor.rgbtRed := 128;

  LBitmap := TBitmap.Create;
  LBitmap.Assign(ASource);
  LBitmap.PixelFormat := pf24bit;
  ADest.Width := LBitmap.Width;
  ADest.Height := LBitmap.Height;
  ADest.PixelFormat := pf24bit;
  for LCountY := 0 to LBitmap.Height - 1 do
  begin
    LPixS := LBitmap.ScanLine[LCountY];
    LPixD := ADest.ScanLine[LCountY];
    for LCountX := 0 to LBitmap.Width - 1 do
    begin
      LByte := Trunc(LPixS.rgbtBlue*0.11+LPixS.rgbtGreen*0.59+LPixS.rgbtRed*0.3);
      FillChar(LPixD^, 3, LByte);

      LIntensity := Max(LIntensity1, LByte);

      LPixD^.rgbtRed := Round((LPixD^.rgbtRed * LIntensity + LBlendColor.rgbtRed * not(LIntensity)) / 255);
      LPixD^.rgbtGreen := Round((LPixD^.rgbtGreen * LIntensity + LBlendColor.rgbtGreen * not(LIntensity)) / 255);
      LPixD^.rgbtBlue := Round((LPixD^.rgbtBlue * LIntensity + LBlendColor.rgbtBlue * not(LIntensity)) / 255);

      inc(LPixD);
      inc(LPixS);
    end;
  end;
  LBitmap.Free;
end;
Wenn man LIntensity1 auf 255 setzt hat man auch einen relativ schnellen Graustufen-Algo
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: bmp->graustufen mit canvas

  Alt 21. Aug 2005, 17:07
Ok...vielen Dank...werds gleich mal ausprobieren...hab selber ein bisschen herumprobiert, bei mir ist aber nix dabei rauskommen...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf