![]() |
GR32 Bilder erhellen/verdunkeln?
hi, habe schon nach gr32+hell und dunkel gesucht, habe hier leider nix passendes gefunden, also hier mal meine frage:
bekomme korrekte jpgs, meisstens übergröße, die ich dann drucken will. mein programm skalliert diese bilder, und schickt einen druckauftrag los. nur leider haben die bilder einen leichten gelbstich wie ich finde, und sind auch heller als die orginalen (wennich die bilder mit einem bildbearbeitungsprogramm zb öffne und drucke). hat da jemand ne idee wie man das machen kann? mich würde interessieren, ob es nicht ein tutorial zur bildbearbeitung mit delphi gibt, wo verschiedene techniken angesprochen werden, mit eventuellen beispielen etc? währe auf jedenfall nicht schlecht, denn ich weiss momentan garnix über bildbearbeitung :( danke |
Re: GR32 Bilder erhellen/verdunkeln?
Bildbearbeitung ist eigentlich ganz einfach - Beim TBitmap32 greifst du über die Pixel-Eigenschaft auf die Farbe jedes einzelnen Pixels zu. Du brauchst dann nur geeignete Algorithmen:
Delphi-Quellcode:
Die tatsächliche Berechnung - und das neue Zusammenbauen der Farbe - kann man sicher noch gehörig optimieren, unter anderem durch direkten Speicherzugriff, wo man mit assembler arbeiten kann.
function Gamma(bitmap: TBitmap32; factor: single): TBitmap32;
var i,k: Integer; c: TColor; begin Result := TBitmap32.Create; Result.assign(bitmap); for i := 0 to Result.Width -1 do for k := 0 to Result.Height -1 do begin c := Result.Pixel[i,k]; Result.Pixel[i,k] := rgb(Round(GetRValue(c) * factor), Round(GetGValue(c) * factor), Round(GetBValue(c) * factor)); end; end; |
Re: GR32 Bilder erhellen/verdunkeln?
ah ok danke, ich glaube ich verstehe den weg! aber was macht man wenn man nach dem verkleinern eines bildes, es zumbeispiel schärfen will? dafür muss es doch sicher ne fertige function geben, denn mit den einzelnen pixeln kann man dann ja nix mehr anfangen oder?
danke |
Re: GR32 Bilder erhellen/verdunkeln?
Klar, verkleinern kann man es, dafür gibts extra Filter eingebaut bei GR32, die natürlcih auch mit den einzelnen Pixeln arbeiten^^
Ein Bild besteht nur aus "einzelnen Pixeln", und beim Skalieren werden die auch nur miteinander verrechnet. Du müsstest dir eben einen Schärf-Algo suchen, obwohl ich bezweifle, dass das bei Fotos notwending ist.
Delphi-Quellcode:
Hier mla ne Methode Funktion zum Verkleinern, einmal für Tbitmap32 und einmal für Tbitmap, wobei die qualität bei letzterem natürlich eher schlecht ist:
var
bklein, bgros: TBitmap32; bklein.stretchfilter := sflanczos; bklein.width := kleiner_wert; bklein.height := anderer_kleiner_wert_evtl_propertional; bklein.Draw(rect(),bgroß,rect());
Delphi-Quellcode:
{-----------------------------------------------------------------------------
Function: ResizeBitmap32 Author: luke Date: 11-Jun-2006 Arguments: src: TBitmap32; dst: TPoint Result: TBitmap32 stretches a TBitmap32, keeping proportions -----------------------------------------------------------------------------} function ResizeBitmap32(src: TBitmap32; dst: TPoint): TBitmap32; var scalex,scaley,scale: single; sf: TStretchFilter; begin scalex := dst.X / src.Width; scaley := dst.Y / src.Height; scale := Min(scalex, scaley); if scale > 1 then sf := sfMitchell //magnifying filter else sf := sfLanczos; Result := TBitmap32.Create; Result.Width := Ceil(src.Width * scale); Result.Height := Ceil(src.Height * scale); Result.Clear(clWhite32); Result.StretchFilter := sf; Result.Draw(rect(0,0,Result.Width,Result.Height), //over the whole bitmap rect(0,0,src.Width,src.Height), //the whole src src); end; function ResizeBitmap(src: TBitmap; dst: TPoint): TBitmap; var scalex,scaley,scale: single; begin scalex := dst.X / src.Width; scaley := dst.Y / src.Height; scale := Min(scalex, scaley); Result := TBitmap.Create; Result.Width := Ceil(src.Width * scale); Result.Height := Ceil(src.Height * scale); Result.Canvas.StretchDraw(rect(0,0,Result.Width,Result.Height),src); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 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 by Thomas Breitkreuz