![]() |
Bild in Graustufen umwandeln
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 |
Re: Bild in Graustufen umwandeln
:hi:
Ich hab im ![]() Dies hier gefunden :
Delphi-Quellcode:
In den Kommentaren zum Beitrag findest du auch noch dies :
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;
Delphi-Quellcode:
und
Gray:=round((r+g+b)/3);
Delphi-Quellcode:
Gray:=round(sqrt(r*r+g*g+b*b));
|
Re: Bild in Graustufen umwandeln
Hi!
In der ![]()
Delphi-Quellcode:
Best_Regards
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; Burning_Chrome |
Re: Bild in Graustufen umwandeln
Um für mehr Auswahl zu sorgen:
Delphi-Quellcode:
grüße, daniel
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; |
Re: Bild in Graustufen umwandeln
Hi!
@Sanchez0815: lediglich das
Delphi-Quellcode:
stoert etwas, da die 'echte' helligkeit so nicht gerechnet werden kann (s.o.)
h := (r+b+g) div 3;
unsere augen sind nicht fuer alle farben gleich empfindlich. Best_Regards Burning_Chrome |
Bild in Graustufen umwandeln
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 :-D zuerst ne record erstellen:
Delphi-Quellcode:
anschliessend:
TRGB = record
blue :byte; red :byte; green :byte; end;
Delphi-Quellcode:
mein bild ist vom typ bmp, daher BitMap und wird in einer Paintbox gezeichnet.
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; |
Re: Bild in Graustufen umwandeln
Danke, fresh_hotboy
Zitat:
|
AW: Bild in Graustufen umwandeln
Liste der Anhänge anzeigen (Anzahl: 1)
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. :) |
AW: Bild in Graustufen umwandeln
Das End der ersten Schleife gehört hinter das End der zweiten.
|
AW: Bild in Graustufen umwandeln
Danke für den Hinweis, doch leider ändert auch das nichts an meinem Problem. :cry:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz