AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild drehen mit Graphics32 und / oder GDI+
Thema durchsuchen
Ansicht
Themen-Optionen

Bild drehen mit Graphics32 und / oder GDI+

Ein Thema von schlagzu · begonnen am 10. Aug 2011 · letzter Beitrag vom 11. Aug 2011
Antwort Antwort
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#1

Bild drehen mit Graphics32 und / oder GDI+

  Alt 10. Aug 2011, 22:13
Hallo,

ich habe mal wider ne Stelle, an der ich nicht weiterkomme. Wahrscheinlich finde ich in den nächsten 15 min die Lösung, aber trotzdem suche ich eure Hilfe. Ich benutzte zur zeit diese (auch die einzige funktionierende die ich gefunden habe) Procedure die ich im Forum hier gefunen habe:

Delphi-Quellcode:
procedure Rotate(const Src: TBitmap32; const Dst: tBitmap32; Angle: Single; x,y: integer);
var
  SrcR: Integer;
  SrcB: Integer;
  T: TAffineTransformation;
  Sx, Sy, Scale: Single;
begin
  SrcR := Src.Width - 1;
  SrcB := Src.Height - 1;
  T := TAffineTransformation.Create;
  T.SrcRect := FloatRect(0, 0, SrcR +1, SrcB + 1);
  try
    // shift the origin
    T.Clear;

    // move the origin to a center for scaling and rotation
    T.Translate(-SrcR / 2 , -SrcB / 2 );
    T.Rotate(0, 0, Angle);

    // move the origin back
    T.Translate(SrcR / 2, SrcB / 2 );

    // zu x und y bewegen
    T.Translate(x,y);

    // transform the bitmap
    Transform(Dst, Src, T);
  finally
    T.Free;
  end;
end;
Jedoch entstehen dabei unschöne ränder bei 90° 180° 270° entstehen. Siehe bild:



Darum suche ich eine Lösung diese Problems oder eine andere Möglichkeit auch mit gdi+ falls nötig!

MfG schlagzu
Miniaturansicht angehängter Grafiken
unbenannt.png  
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#2

AW: Bild drehen mit Graphics32 und / oder GDI+

  Alt 10. Aug 2011, 23:50
Vielleicht sind das irgendwelche Rundungsfehler von Float auf Integer beim Teilen mit / z.B hier:
Code:
T.Translate(-SrcR / 2 , -SrcB / 2 );
Warum wird hier 1 abgezogen?
Code:
SrcR := Src.Width - 1;
Was ist hiermit?
http://graphics32.org/news/newsgroup...ticle_id=11397

Geändert von Jens01 (11. Aug 2011 um 00:24 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Bild drehen mit Graphics32 und / oder GDI+

  Alt 11. Aug 2011, 01:11
Warum wird hier 1 abgezogen?
Indizierung. Ein Bitmap der Breite 640 hat die Pixelkoordinaten 0..639. Normalerweise! Allerdings kann das hier in der Tat das Problem sein, der Autor war sich zwar beim FloatRect() der anderen Rasterbildung bei Float-Indizierung bewusst, beim Translate() dagegen nicht. Also die "-1" mal raus, und beim FloatRect() die "+1" weg. Das könnte es schon sein.

Ansonsten: Hat dein Bitmap gerade oder ungerade Ausmaße? Wie verhält sich das mit einem Bitmap je ein Pixel höher und breiter? Und: Ist das Bitmap wirklich exakt quadratisch?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (11. Aug 2011 um 01:15 Uhr)
  Mit Zitat antworten Zitat
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#4

AW: Bild drehen mit Graphics32 und / oder GDI+

  Alt 11. Aug 2011, 16:25
Da gibt es zu viele fremde Komponenten, die ich nicht finde z.B.: ksLanczosKernel


Also ich habe folgende Möglichkeiten mit folgenden Ergebnissen:

1:
[SIZE="8"]
Delphi-Quellcode:
  SrcR := Src.Width;
  SrcB := Src.Height;
  T := TAffineTransformation.Create;
  T.SrcRect := FloatRect(0, 0, SrcR +1, SrcB + 1);
[/SIZE]

2:
[SIZE="8"]
Delphi-Quellcode:
  SrcR := Src.Width;
  SrcB := Src.Height;
  T := TAffineTransformation.Create;
  T.SrcRect := FloatRect(0, 0, SrcR, SrcB);
[/SIZE]


3:
Delphi-Quellcode:
[SIZE="8"] SrcR := Src.Width -1;
  SrcB := Src.Height -1;
  T := TAffineTransformation.Create;
  T.SrcRect := FloatRect(0, 0, SrcR, SrcB);[/SIZE]


Das erste Bild war 100x100 Px groß das jetzige ist 101x101 (hat aber keine Auswirkung, habe jede Änderung auch mit 100x100 probiert).

Danke für die Hilfe, vllt könnte nochmal jemand sich diesem Problem annehmen.

MfG schlagzu
Miniaturansicht angehängter Grafiken
unbenannt1.png   unbenannt2.png   unbenannt3.png  
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#5

AW: Bild drehen mit Graphics32 und / oder GDI+

  Alt 11. Aug 2011, 17:28
hmm wenn ich den Source richtig interpretiere...

bei 100x100 ist der Ratotionspunkt um 1 verschoben
bei 101x101 tritt beim verschieben des Bildes ein Rundungsfehler auf (um 1 versetzt)
  Mit Zitat antworten Zitat
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#6

AW: Bild drehen mit Graphics32 und / oder GDI+

  Alt 11. Aug 2011, 20:08
Gibt es dafür eine Lösung?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Bild drehen mit Graphics32 und / oder GDI+

  Alt 11. Aug 2011, 20:35
Schlag mal hier zu..
http://www.delphipraxis.net/130998-a...-rotation.html

Und ohne Antialias wird das definitiv nichts mit deinen Kanten.

gruss

Geändert von EWeiss (11. Aug 2011 um 20:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ehX
ehX

Registriert seit: 11. Aug 2011
Ort: Augsburg
55 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Bild drehen mit Graphics32 und / oder GDI+

  Alt 11. Aug 2011, 23:49
Zitat:
Da gibt es zu viele fremde Komponenten, die ich nicht finde z.B.: ksLanczosKernel
Die Kernel-Resampler sind bei Graphics32 dabei und sind keine Fremd-Komponenten.
Du musst dazu einfach nur die unit GR32_Resamplers einbinden, da finden sich alle möglichen Kernel.
Fin
  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:38 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