![]() |
ImageEn: Ausschnitt/Vergrößerung speichern
Hallo,
auf einem Formular habe ich zwei ImageEnViews. Analog zum Magnify-Demo zeige ich in einem View einen Ausschnitt eines Bitmaps aus dem anderen View an:
Delphi-Quellcode:
Soweit funktioniert es.
var
rc: TRect; ww, hh: integer; begin rc.left := xpos - (RectWidth div 2); rc.top := ypos - (RectHeight div 2); rc.Right := xpos + (RectWidth div 2); rc.Bottom := ypos + (RectHeight div 2); with ImageEnView1 do begin rc.Left := XScr2Bmp(rc.Left); rc.Right := XScr2Bmp(rc.right); rc.Top := YScr2Bmp(rc.top); rc.Bottom := YScr2Bmp(rc.bottom); end; ww := rc.right - rc.left + 1; hh := rc.bottom - rc.top + 1; ImageEnView2.IEBitmap.Allocate(ww, hh, ImageEnView1.IEBitmap.PixelFormat); ImageEnView1.IEBitmap.CopyRectTo(ImageEnView2.IEBitmap, rc.Left, rc.Top, 0, 0, ww, hh); ImageEnView2.Update; ImageEnView2.Fit; Nun kann ich das Bitmap des zweiten Views (den Ausschnitt) problemlos speichern:
Delphi-Quellcode:
Solange ich die Skalierung beibehalte, ergeben sich auch keine Probleme. Sobald ich diesen jedoch ändere, wird der Ausschnitt nur noch anteilig in Originalgröße gespeichert.
var
io: TImageEnIO; begin io := TImageEnIO.Create(self); io.AttachedBitmap := ImageEnView2.Bitmap; IO.Params.JPEG_Quality := 100; IO.SaveToFileJpeg(Dateiname); io.free; Wenn ich also zum Beispiel in das Originalbitmap zoome, wird der Ausschnitt entsprechend größer auf dem Formular dargestellt. Will ich diese Vergrößerung nun speichern, wird stattdessen die ursprüngliche Skalierung beibehalten und der Ausschnitt von den Abmessungen her verkleinert (wenn ich hineinzoome, wird das gespeicherte Bitmap entsprechend in Höhe und Breit kleiner, beim Hinauszoomen größer). Mein Ziel ist es, exakt den Ausschnitt (also die Ausgabe auf dem Formular) zu speichern. Hierzu habe ich x Möglichkeiten durchgetestet, z. B.
Delphi-Quellcode:
Ich habe auch schon das Bitmap des zweiten Views in ein neues Bitmap geladen, das View dann geleert und anschließend wieder zurückgelesen - gleiches Ergebnis.io.Params.Width := 480; io.Params.Height := 800; oder io.IEBitmap.Width := 480; io.IEBitmap.Height := 800; oder io.Bitmap.Width := 480; io.Bitmap.Height := 800; Kann mir jemand einen Tipp geben, wo mein Denkfehler liegt? Danke und viele Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 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