AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

emf drehen

Ein Thema von gargano · begonnen am 18. Jun 2008 · letzter Beitrag vom 20. Jun 2008
Antwort Antwort
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#1

emf drehen

  Alt 18. Jun 2008, 12:07
Hallo zusammen,

ich suche eine Möglichkeit ein emf File zu drehen, also eine Funktion
in der Art :

EMFRotate (src,dest:TMetafile;Angle:Integer);

Wichtig ist, daß dest auch wieder EMF ist, damit keine Qualitätsverluste
entstehen.
Bitte keine Vorschläge für bmp-rotate, die habe ich genügend. Alle mit dem Nachteil
massiver Qualitätsverluste beim zoomen.

Gibt es sowas ?

Gruß
gargano
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: emf drehen

  Alt 18. Jun 2008, 12:15
Hi,

ich hab zwar mal was zum EMF gedreht zeichnen gefunden, aber das dann auf ein neues EMF zu zeichnen ist nicht gerade ideal Suche also auch nach einer Lösung zu TMetafile drehen.

180° geht ganz einfach mit Canvas.StretchDraw und oben/unten sowie links/rechts vertauschhen im Rechteck.

Ungefähr so ähnlich:

Delphi-Quellcode:
        //TODO
        with TMetafileCanvas.Create(Graphic, 0) do
        try
          dc:=Handle;
          SetGraphicsMode(DC, GM_ADVANCED);
          XFORM.eM11 := 0;
          XFORM.eM22 := 0;
          XFORM.eM12 := -1;
          XFORM.eM21 := 1;
          XFORM.eDX := H2;
          XFORM.eDY := W2;
          SetMapMode(dc, MM_TEXT);
          SetWorldTransform(DC, XFORM);
          Draw(-W2, -H2, Graphic);
        finally
          Free;
        end;
Wie gesagt, so toll funktioniert es nicht. Ich beobachte sogar Verzerrungen wenn eine bereits gedrehte Metafile nochmal gedreht wird.

[edit] Und selbst damit gehen nur vielfache von 90° [/edit]

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: emf drehen

  Alt 20. Jun 2008, 12:20
Hallo FAlter,

danke für den Tip.
Andere Winkel als 90° kann man mit

XFORM.eM11 := Cos(DegToRad(Angle));
XFORM.eM22 := Cos(DegToRad(Angle));
XFORM.eM12 := Sin(DegToRad(Angle));
XFORM.eM21 := -Sin(DegToRad(Angle));

darstellen,Verzerrungen inbegriffen.

Allerdings kann ich die Eigenart von eDX und eDY nicht ganz nachvollziehen.
Bei mir ist dann das gedrehte Bild nicht an derselben Stelle wie das nicht gedrehte,
sondern verschoben.

Gruß
Gargano
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#4

Re: emf drehen

  Alt 20. Jun 2008, 12:26
Hi,

Zitat von gargano:
Andere Winkel als 90° kann man mit

XFORM.eM11 := Cos(DegToRad(Angle));
XFORM.eM22 := Cos(DegToRad(Angle));
XFORM.eM12 := Sin(DegToRad(Angle));
XFORM.eM21 := -Sin(DegToRad(Angle));

darstellen,Verzerrungen inbegriffen.
An Winkelfunktionen habe ich noch gar nicht gedacht.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: emf drehen

  Alt 20. Jun 2008, 12:35
Hallo Falter,

hast Du eine Erklärung für die Verschiebung ?

Gruß
Gargano
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#6

Re: emf drehen

  Alt 20. Jun 2008, 12:41
Hi,

ich dachte, eDX und eDY wären das Drehzentrum, dann hast du nen Winkel, und wenn du dann zeichnest, wird alles mitgedreht, d. h. sämtliche Operationen auf deinem DC werden transformiert. Gibst du nun irgendwelche Koordinaten ein, werden diese mitgedreht und dann an der neuen Stelle gezeichnet. Wahrscheinlich war das der Grund, weshalb ich damals negative Koordinaten übergeben habe.

Hmm, ich habe den Code derzeit auskommentiert, muss ihn nochmal überarbeiten. Dann werde ich mich nochmal genauer damit beschäftigen.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: emf drehen

  Alt 20. Jun 2008, 12:50
Hi FAlter,

Drehzentrum könnte hinkommen, die Hilfe gilt folgende Info für SetWorldTransform :

For any coordinates (x, y) in world space, the transformed coordinates in page space (x', y') can be determined by the following algorithm:

x' = x * eM11 + y * eM21 + eDx,
y' = x * eM12 + y * eM22 + eDy,
where the transformation matrix is represented by the following:

| eM11 eM12 0 |
| eM21 eM22 0 |
| eDx eDy 1 |


Gruß
Gargano
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: emf drehen

  Alt 20. Jun 2008, 14:40
Noch ein Nachtrag :
Jetzt habe ich einiges ausprobiert :

Drehpunkt scheint immer 0,0 zu sein, nur wird jeh nach Drehrichtung das Bild dann verschoben.
Probier mal es mir einem Blatt Papier aus.
Deshalb muß dann das gesamte Bild noch verschoben werden, damit es wieder in den ursprünglichen dc paßt.
Bei Dir war es negativ, für 90° wäre es

Dx := h;
Dy :=0;

für -90°

eDx := 0 ;
eDy := w

Verzerrungen gibt es mit einem floodfill erzeugten Rechteck mit z. B 45° in dem Bild.

Gruß
gargano
Angehängte Dateien
Dateityp: pdf method_622.pdf (505,5 KB, 19x aufgerufen)
  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 18:41 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