AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi ImageEn: Ausschnitt/Vergrößerung speichern
Thema durchsuchen
Ansicht
Themen-Optionen

ImageEn: Ausschnitt/Vergrößerung speichern

Ein Thema von Opa Knack · begonnen am 12. Jul 2016
Antwort Antwort
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#1

ImageEn: Ausschnitt/Vergrößerung speichern

  Alt 12. Jul 2016, 02:18
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:
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;
Soweit funktioniert es.

Nun kann ich das Bitmap des zweiten Views (den Ausschnitt) problemlos speichern:

Delphi-Quellcode:
var
  io: TImageEnIO;
begin
  io := TImageEnIO.Create(self);
  io.AttachedBitmap := ImageEnView2.Bitmap;
  IO.Params.JPEG_Quality := 100;
  IO.SaveToFileJpeg(Dateiname);
  io.free;
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.

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:
  
  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;
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.

Kann mir jemand einen Tipp geben, wo mein Denkfehler liegt?

Danke und viele Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz