AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild in Graustufen umwandeln

Bild in Graustufen umwandeln

Offene Frage von "bernau"
Ein Thema von fresh_hotboy · begonnen am 27. Okt 2003 · letzter Beitrag vom 7. Dez 2018
Antwort Antwort
Seite 1 von 2  1 2   
fresh_hotboy

Registriert seit: 16. Okt 2003
6 Beiträge
 
#1

Bild in Graustufen umwandeln

  Alt 27. Okt 2003, 23:32
hi zusammen

diese seite hier ist echt supi!!
bin studi und arbeite grade an einem projekt, jedoch benötige ich hierzu ne hilfestellung. kann mir jemand ausführlich sagen wie ich ein bild in Graustufen umwandeln kann? wäre euch da sehr dankbar.

thanks

bin ein delphi anfänger
  Mit Zitat antworten Zitat
Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#2

Re: Bild in Graustufen umwandeln

  Alt 28. Okt 2003, 00:20


Ich hab im SwissDelphiCenter
Dies hier gefunden :
Delphi-Quellcode:
function*GetGreyScale(red,*blue,*green:*TColor):*TColor;
var*
**Color:*Integer;
begin
**Color*:=*Round(red***0.56*+*green***0.33*+*blue***0.11);
**Result*:=*RGB(Color,*Color,*Color);
end;
In den Kommentaren zum Beitrag findest du auch noch dies :

Gray:=round((r+g+b)/3); und
Gray:=round(sqrt(r*r+g*g+b*b));
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat
Benutzerbild von Burning_Chrome
Burning_Chrome

Registriert seit: 15. Sep 2003
Ort: Austria
25 Beiträge
 
Delphi 7 Architect
 
#3

Re: Bild in Graustufen umwandeln

  Alt 28. Okt 2003, 06:27
Hi!

In der Delphi-Source.de steht vom Autor Robert Schiebel folgender code (hab ihn schon mal getestet und er funzt super):

Delphi-Quellcode:
type
  TPixelBMP24 = packed record
    R: byte;
    G: byte;
    B: byte;
end;

var
  SrcBMP, DstBMP24: TBitmap;

procedure TForm1.FormCreate(sender: TObject);
begin
  SrcBMP:=TBitmap.Create; {Src Bitmap erstellen}
  SrcBMP.LoadFromFile('datei'); //sollte 24Bit sein

  DstBMP24:=TBitmap.Create; {24-Bit Dst Bitmap erstellen}
  DstBMP24.PixelFormat:=pf24bit;
  DstBMP24.Width:=SrcBmp.Width;
  DstBMP24.Height:=SrcBmp.Height;
end;

function BMPRGBtoYUV(rgb: TPixelBMP24): TPixelBMP24;
var y,u,v:longint;
begin
  y := rgb.G*150 + rgb.B*29 + rgb.R*77; // 0.587 x 256, 0.114 x 256, 0.299 x 256
  u := (rgb.B shl 8 - y) * 144; // 0.564 x 256
  v := (rgb.R shl 8 - y) * 183; // 0,713 x 256
  Result.G :=y shr 8;
  Result.B :=u shr 16 + $80;
  Result.R :=v shr 16 + $80;
end;

function BMPYUVtoRGB(yuv: TPixelBMP24): TPixelBMP24;
var temp: integer;
begin
  temp := yuv.G + (yuv.B - $80) * 256 div 144 ;
  if temp > 0 then Result.B:=temp else Result.B:=0;
  if temp > 255 then Result.B:=255;

  temp := yuv.G + (yuv.R - $80) * 256 div 183 ;
  if temp > 0 then Result.R:=temp else Result.R:=0;
  if temp > 255 then Result.R:=255;

  temp := (yuv.G shl 8 - Result.B*29 - Result.R*77) div 150;
  if temp > 0 then Result.G:=temp else Result.G:=0;
  if temp > 255 then Result.G:=255;
end;

procedure TForm1.Button4Click(Sender: TObject);
var x, y: integer;
  SrcPixel: ^TPixelBMP24;
  DstPixel: ^TPixelBMP24;
  yuv: TPixelBMP24;
begin
  for y:=0 to SrcBMP.Height-1 do // SrcBMP und DstBMP24 sind gleich groß !!!
  begin
    SrcPixel:=SrcBMP.ScanLine[y];
    DstPixel:=DstBMP24.ScanLine[y];
    for x:=0 to SrcBMP.Width-1 do
    begin
      yuv:=BMPRGBtoYUV(SrcPixel^);
      yuv.R:=$80;
      yuv.B:=$80;
      DstPixel^ := BMPYUVtoRGB(yuv);
      inc(SrcPixel);
      inc(DstPixel);
    end;
  end;

  Image1.Picture.Graphic:=DstBMP24;
end;
Best_Regards
Burning_Chrome
Ich hab keine Ahnung - aber wenigstens bin ich nicht allein!
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#4

Re: Bild in Graustufen umwandeln

  Alt 28. Okt 2003, 07:48
Um für mehr Auswahl zu sorgen:
Delphi-Quellcode:
type PixArray = Array [0..2] of Byte;

procedure GrayScale(helpbmp : TBitmap);
var i, j : integer;
    R, G, B, h : Byte;
    p: ^PixArray;
begin
  helpbmp.PixelFormat := pf24bit;
  for i:=0 to helpbmp.height - 1 do begin
    p := helpbmp.ScanLine[i];
    for j:=0 to helpbmp.width - 1 do begin
      R := p^[2];
      B := p^[1];
      G := p^[0];

      h := (r+b+g) div 3;
      p^[2] := h;
      p^[1] := h;
      p^[0] := h;

      inc(p);
    end;
  end;
end;
grüße, daniel
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Burning_Chrome
Burning_Chrome

Registriert seit: 15. Sep 2003
Ort: Austria
25 Beiträge
 
Delphi 7 Architect
 
#5

Re: Bild in Graustufen umwandeln

  Alt 29. Okt 2003, 06:18
Hi!

@Sanchez0815:


lediglich das
 h := (r+b+g) div 3; stoert etwas, da die 'echte' helligkeit so nicht gerechnet werden kann (s.o.)
unsere augen sind nicht fuer alle farben gleich empfindlich.

Best_Regards
Burning_Chrome
Ich hab keine Ahnung - aber wenigstens bin ich nicht allein!
  Mit Zitat antworten Zitat
fresh_hotboy

Registriert seit: 16. Okt 2003
6 Beiträge
 
#6

Bild in Graustufen umwandeln

  Alt 12. Nov 2003, 17:30
hi hi
danke für eure schnelle und professionelle hilfe. habe mich auch selber noch in ein paar büchern schlau gemacht und au ne lösung gefunden. hier möchte ich dies für die nachwelt der nächsten fragenden veröffentlichen

zuerst ne record erstellen:

Delphi-Quellcode:
TRGB = record
               blue :byte;
               red :byte;
               green :byte;
           end;
anschliessend:

Delphi-Quellcode:
procedure TForm_Web_Cam.Button_GraustufenClick(Sender: TObject);

var x,y :integer;
    pixel :^TRGB;
    grau :TColor;

begin
   if BitMap.PixelFormat <> pf24bit then
   begin
      showmessage('Bild ist keine 24-Bitfarben'); //wenn kein 24bit Bild
      exit
   end;


for y:= 0 to BitMap.height-1 do
   begin
      pixel:= BitMap.Scanline[y];
         for x:= 0 to BitMap.width-1 do
            begin
               grau:= HiByte(pixel.red*77+pixel.green*151+pixel.blue*28); //neuzuweisen der farbe
               pixel.red:= grau;
               pixel.blue:= grau;
               pixel.green:= grau;
               inc(pixel)
            end
   end;
PaintBox.refresh //damit wird die Paintbox nochmal mit dem neuen bild geladen
end;
mein bild ist vom typ bmp, daher BitMap und wird in einer Paintbox gezeichnet.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Bild in Graustufen umwandeln

  Alt 12. Nov 2003, 17:36
Danke, fresh_hotboy

Zitat von fresh_hotboy:
grau:= HiByte(pixel.red*77+pixel.green*151+pixel.blue*28); //neuzuweisen der farbe
Diesen "Trick" solltest Du dann aber noch "für die Nachwelt" und alle, die sich bisher nicht mit Fixpunktarithmetik beschäftigt haben, dokumentieren.
gruß, choose
  Mit Zitat antworten Zitat
Celi

Registriert seit: 18. Dez 2017
2 Beiträge
 
#8

AW: Bild in Graustufen umwandeln

  Alt 4. Dez 2018, 15:49
Hallo, ich bin neu hier und habe eine Frage zur Umwandlung in Graustufen. :oops:

Mein Quellcode scheint soweit richtig zu sein, das Programm lässt sich ohne weitere Fehlermeldungen öffnen. Allerdings passiert leider gar nichts, wenn man meinen Button benutzt.

Ich vermute es liegt an der Zeile "image1.Picture.Bitmap.PixelFormat:=pf24bit;". Hat jemand einen Tipp bzw. muss ich vorher was zu den 24Bit festlegen und wenn ja wie funktioniert das?:cyclops:


Dankeschön im Voraus. :)
Miniaturansicht angehängter Grafiken
screenshot.png  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.722 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Bild in Graustufen umwandeln

  Alt 4. Dez 2018, 15:51
Das End der ersten Schleife gehört hinter das End der zweiten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Celi

Registriert seit: 18. Dez 2017
2 Beiträge
 
#10

AW: Bild in Graustufen umwandeln

  Alt 4. Dez 2018, 15:58
Danke für den Hinweis, doch leider ändert auch das nichts an meinem Problem.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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