Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
17.05.2012, 03:21:15
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Einsteiger Forum
| | |-+  Ausschnitt eines Image errechnen !?
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Ausschnitt eines Image errechnen !?  (Gelesen 1517 mal)
Thomas
Newbie
*
Offline Offline

Beiträge: 32


« am: 18.09.2008, 21:26:07 »

Hallo,

mein Problem ist weniger ein Delphi-Programmier-Problem als ein mathematisches Problemchen, bei dem ich irgendwie "ein Brett vor dem Kopf" habe.

Ich habe eine Form (Form1) auf der lediglich ein Image (Image1) mit einem JPG-Bild ist. Mit dem Mausrad kann ich den Zoomfaktor (globale Variable _Zoom) des Bildes zwischen den Variablen _Min (z.B. 0.10) und _Max (z.B. 3.00) in Schritten zu 0.01 einstellen. Und per linker Maustaste kann ich das Bild innerhalb der Form verschieben.
Dabei gelten folgende Konventionen:
- Das Verhaltnis Image1.Width : Image1.Height ist immer gleich dem Verhältnis Jpg.Width : jpg.Height
- Wenn eine Seite außerhalb der Form liegt, so liegt die gegenüberliegende Seite entweder ebenfalls außerhalb der Form oder am Rand der Form, aber keinesfalls innerhalb.
- Wenn eine Seite innerhalb der Form liegt, so liegt die gegenüberliegende Seite entweder ebenfalls innerhalb der Form oder am Rand der Form, aber keinesfalls außerhalb.

Hier die Routine für die Mouse-Events auf dem Image:

Code:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  _OldX := X;
  _OldY := Y;
  if Button = mbLeft then
   _IsDown := True;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  NewX        : Integer;
  NewY        : Integer;
begin
  if _IsDown then
  begin
    NewX := Image1.Left + X - _OldX;
    NewY := Image1.Top + Y - _OldY;
    if Image1.Width < Form1.ClientWidth then
    begin
      if NewX < 0 then
        NewX := 0;
      if (NewX + Image1.Width) > Form1.ClientWidth then
        NewX := Form1.ClientWidth - Image1.Width;
    end
    else
    begin
      if (X < _OldX) and ((NewX + Image1.Width) < Form1.ClientWidth) Then
        NewX := Form1.ClientWidth - Image1.Width;
      if (X > _OldX) and (NewX > 0) Then
        NewX := 0;
    end;
    if Image1.Height < Form1.ClientHeight then
    begin
      if NewY < 0 then
        NewY := 0;
      if (NewY + Image1.Height) > (Form1.ClientHeight) then
        NewY := Form1.ClientHeight - Image1.Height;
    end
    else
    begin
      if (Y < _OldY) and ((NewY + Image1.Height) < (Form1.ClientHeight)) Then
        NewY := Form1.ClientHeight - Image1.Height;
      if (Y > _OldY) and (NewY > 0) Then
        NewY := 0;
    end;
    Image1.Left := NewX;
    Image1.Top := NewY;
  end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  _IsDown := False;
end;


Wie kann ich jetzt den Bereich des Bildes, den ich in der Form sehe, in eine neue jpg-Komponente kopieren?
a) unter Berücksichtigung des Zoomfaktors (also in Originalgröße)
b) ohne Berücksichtigung des Zoomfaktors (also in der angezeigten Größe)

Schonmal Danke für Eure Hilfe und Gruß aus Köln.
Thomas
« Letzte Änderung: 18.09.2008, 21:33:49 von Thomas » Gespeichert
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS