![]() |
Image aus der DB "resizen" und ins ClipBoard kopie
Hallo zusammen,
ich habe hier ein Bild in einem Image-Feld vom Typ TJvDBImage und möchte diee nun mit einer einheitlichen Größe (Maximale Breite - Maximale Höhe) nach Excel bringen (über Zwischenablage). Mein Problem ist es, das Image in der Größe so zu ändern, dass ich die neue Größe in die Zwischenablage bekomme und nicht die Originalgröße. Seit ihr bereit euer Wissen mit mir zu teilen? Vielen Dank MFG Lorenz [Edit]Rechtschreibung[/Edit] |
Re: Image aus der DB "resizen" und ins ClipBoard k
Kopiere es skaliert in eine anderes Bitmap und exportiere dieses in die Zwischenablage
|
Re: Image aus der DB "resizen" und ins ClipBoard k
Meinst du etwa so mit "kopieren":
Delphi-Quellcode:
oder habe ich dich da falsch verstanden?Image1.Width := 100; Image1.Height := 100; Bitmap := TBitmap.Create; try Bitmap.Width := Image1.Width; Bitmap.Height := Image1.Height; Bitmap := Image1.Picture.Bitmap; finally Bitmap.Free; end; MFG Lorenz |
Re: Image aus der DB "resizen" und ins ClipBoard k
*push*
Hallo zusammen,
Delphi-Quellcode:
Hiermit habe ich mal das Bild abgespeichert, aber die Größe ist gleich geblieben.
procedure TForm1.Button2Click(Sender: TObject);
var Bitmap : TBitmap; begin Image1.Width := 10; Image1.Height := 10; Bitmap := TBitmap.Create; try Bitmap.Width := Image1.Width; Bitmap.Height := Image1.Height; Bitmap := Image1.Picture.Bitmap; Bitmap.SaveToFile('C:\Dokumente und Einstellungen\Lorenz.Reinhardt\Desktop\Bild.bmp'); finally Bitmap.Free; end; end; War das mit "Kopieren" gemeint oder habe ich es falsch umgesetzt? Vielen Dank. MFG Lorenz |
Re: Image aus der DB "resizen" und ins ClipBoard k
Hallo Reinhardtinho,
(habe gerade kein Delphi zur Hand, daher nur etwas pauschaler...) ich habe mal eine etwas umständliche Lösung für einen BILDAUSSCHNITT genutzt. Wenn Du nichts besseres findest, kannst Du es vielleicht so versuchen: ImageOrginal ...beinhaltet das originale Bild ImageTmp ...ist auf die Zielgröße eigestellt ...Stretch und Proportional auf Ein ...das Bild (oder bei mir Bildausschnitt) von ImageOriginal dort hineinkopieren (das Bild wird nun korrekt dargestellt, die tatsächliche Bildgröße kann aber noch abweichen) ImageNeu ...ist auf die Zielgröße eigestellt ...Picture-Größe ebenfalls auf die Zielgröße einstellen ...Stretch und Proportional auf Aus ...ImageTmp.Canvas dem ImageNeu.Canvas zuweisen (das Bild wird nun korrekt dargestellt und hat auch die richtige Größe) ...Bild in Zwischenablage kopieren... Wie gesagt, wenn Du nichts besseres findest sollte das so sicher funktionieren (wenn auch nicht sonderlich elegant). Stahli |
Re: Image aus der DB "resizen" und ins ClipBoard k
Du kopierst das Bild auch 1:1. Schau dir mal .Canvas.StretchDraw() an
|
Re: Image aus der DB "resizen" und ins ClipBoard k
Super, das mit dem Canvas.StretchDraw() klappt nun wunderbar.
Nun noch etwas, ich habe das jetzt für ein Bitmap gemacht, in der Datenbank können (bzw. werden) die Bilder von unterschiedlichen Typen sein (*.bmp; *.jpg; *.jpeg). Nun habe ich in einer Testanwendung mal ein Bild vom Typ *.jpg geladen und verkleinert abgespeichert, allerdings ist das Resultat eine weiße Fläche (mit richtiger Größe). Was muss ich noch ändern, dass auch Jpg-Bilder verkleinert werden können?
Delphi-Quellcode:
Bitmap := TBitmap.Create;
try Bitmap.Width := 100; Bitmap.Height := 100; Bitmap.Canvas.StretchDraw(Rect(0,0,100,100), Image1.Picture.Bitmap); Bitmap.SaveToFile('C:\Dokumente und Einstellungen\Lorenz.Reinhardt\Desktop\Bild.bmp'); finally Bitmap.Free; end; Vielen Dank! MFG Lorenz |
Re: Image aus der DB "resizen" und ins ClipBoard k
Nach ein bisschen Suchen habe ich die Prozedur Assign gefunden und somit ist das Problem gelöst.
Vielen Dank an alle die geholfen haben. :dp: :thumb: Hier noch schnell meine Lösung:
Delphi-Quellcode:
MFG
procedure TForm1.Button2Click(Sender: TObject);
var Bitmap1, Bitmap2 : TBitmap; AFormat : Word; AData : THandle; APalette : HPALETTE; begin Bitmap1 := TBitmap.Create; Bitmap2 := TBitmap.Create; try Bitmap1.Width := 100; Bitmap1.Height := 100; Bitmap2.Assign(Image1.Picture.Graphic); Bitmap1.Canvas.StretchDraw(Rect(0,0,100,100), Bitmap2); Bitmap1.SaveToClipboardFormat(AFormat, AData, APalette); ClipBoard.SetAsHandle(AFormat, AData); finally Bitmap1.Free; Bitmap2.Free; end; end; Lorenz *** GELÖST *** |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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