![]() |
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:
|
AW: Bild in Graustufen umwandeln
50 Shades of gray
Und welches ist jetzt das "offiziell" Richtige :stupid: |
AW: Bild in Graustufen umwandeln
Zitat:
Du kannst den Code auch hier als Text einfügen mit [delphi]-Tags drum rum. Dann hast du hier auch Syntax Highlighting |
AW: Bild in Graustufen umwandeln
Mir ist das ganze sowieso suspekt. Mal ein paar Dinge:
|
AW: Bild in Graustufen umwandeln
Zitat:
|
AW: Bild in Graustufen umwandeln
Zitat:
Von daher würde ich dir da widersprechen. |
AW: Bild in Graustufen umwandeln
Zitat:
![]() |
AW: Bild in Graustufen umwandeln
|
AW: Bild in Graustufen umwandeln
Zitat:
|
AW: Bild in Graustufen umwandeln
Zitat:
|
AW: Bild in Graustufen umwandeln
Zitat:
Zitat:
Zitat:
Ansonsten kann ich dir nur zustimmen. Aber wäre wirklich nett, wenn du mir mal etwas Erleuchtung bringst, ich blicke da manchmal nicht recht was du sagen willst. |
AW: Bild in Graustufen umwandeln
kleine Ergänzung
obige beiträge zielen immer auf DELPHI + VCL Framework ab es gibt aber noch die Option DELPHI + FMX Framework , Ein Demo Projekt um Schwarz- Weiss Bilder zu erzeugen gibt es hier : ![]() Der Code funktioniert dann auch unter LINUX etc. |
AW: Bild in Graustufen umwandeln
Zitat:
Und GetPixel\SetPixel? Kein Ahnung wie schnell das unter LINUX\FMX ist jedenfalls unter Windows um einiges lahmer. Das sollte auch unter Linux laufen oder kennt Linux kein ASM sollte mich doch schwer wundern.
Delphi-Quellcode:
und FMX.
function TSkinEngine.Rgb2Gray(RGBValue: COLORREF): COLORREF; stdcall;
asm movzx edx, al imul edx, 19595 //Red movzx ecx, ah imul ecx, 38470 //Greean shr eax, 16 imul eax, 7471 //Blue add eax, ecx add eax, edx shr eax, 16 mov ah, al shl eax, 8 mov al, ah end; grusss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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