Hi,
ich versuche in c# 2 Bilder zusammenzufügen (Wasserzeichen).
Gleichzeitig habe ich aber das Problem dass ich manche Bilder drehen
muss (andere nicht).
Zuerst lade ich mit die BitmapFrame´s und füge dann im DrawinContext die
Beiden Frames ein.
Soll ein Bild gedreht werden, schreibe ich ein PushTransform davor,
welches dann die 90° anwendet. Hier mal der Code für ein Bild:
leider habe ich das Problem, dass mein Bild bei der Ausgabe nicht mittig
sitzt. Ich habe Oben und Links einen schwarzen Rand.
=> Wenn ich das Bild nicht rotiere, passt es perfekt
welchen Denkfehler habe ich?
=> wenn ich das Bild auf exakt 1/4 der Breite verschiebe (negativ von
links, positiv von oben) ansetze, passt das Bild... das ergibt aber für
mich keinen Sinn <- woher kommt die Verschiebung?
> Im Anhang ein kleiner Export
VIelen Dank
hase schrieb:> ich versuche in c# 2 Bilder zusammenzufügen
??
Das ist etwa so dämlich wie:
"Ich versuche mit einem Klebestreifen 2 Bilder zusammenzufügen."
hase schrieb:> leider habe ich das Problem, dass mein Bild bei der Ausgabe nicht mittig> sitzt. Ich habe Oben und Links einen schwarzen Rand.>> => Wenn ich das Bild nicht rotiere, passt es perfekt>> welchen Denkfehler habe ich?
Du hast nicht darüber nachgedacht, wo wohl das Zentrum der Rotation
liegen mag...
@c-hater
> Du hast nicht darüber nachgedacht, wo wohl das Zentrum der Rotation> liegen mag...
doch sogar sehr lange... <- aber bestimmt nicht richtig :D
> new RotateTransform(90, baseHeight / 2, baseWidth / 2);
Leider bringt mich das nicht weiter. Ich dachte immer, die halbe Höhe
und die halbe Breite meiner "Bildgröße" (oder auch die Größe einer
Fläche) müsste der Mittelpunkt sein.
@Dirk
Es ist völlig egal, ob ich hierfür ein Bild oder ein Rechteck nehme...
ist das ganze "verschoben".
@Horst
> Wertvolle Beiträge auf dem Niveau, kennt man sonst nur von Trump auf> Twitter...> Selbst wenn du C# offenkundig nicht magst, kennst du doch nicht die> Gegebenheiten, warum ich das tue???
Cheers
hase schrieb:> doch sogar sehr lange... <- aber bestimmt nicht richtig :D
Das ist ja nun offensichtlich...
Ob die ein echter Programmierer bist, zeigt sich in genau solchen
Situationen. Die erste Idee war offensichtlich falsch. Was mache ich
nun?
Tipp: Doku lesen schadet definitiv nicht. Auch wenn sie im konkreten
Fall nicht gerade sehr schick ist und im ersten Anlauf einigermaßen
un/miß-verständlich. Sie liefert aber Stoff für weitere Hypothesen, die
man dann mit der Praxis abgleichen kann...
Nach einem Nachmittag zielgerichtetem Probierens hat man das Problem so
weit im Griff, dass man das KONZEPT der Transformationen verstanden
hat und es dann auch bei komplexeren Sachen als bei deinem primitiven
Problem korrekt verwenden kann...
Und dann erschließt sich auch der Sinn der Formulierungen in der Doku...
Also ehrlich,
wenn man die Antwort nicht kennt, den Fragenden anzublöken er soll halt
mehr lernen ist doch auch Käse!
Ich kenne die Antwort auch nicht,
weiss aber, daß viele rotate implementationen schlicht und ergreifend um
origin rotieren.
Also wär mein nächster Ansatz den Origin zu verschieben
(TranslateTransform((float)width/2, (float)height/2))
danach rotieren (RotateTransform(90)) und dann wieder zurückzuschieben
(TranslateTransform(-(float)width/2, -(float)height/2))
und ja ich habe absichtlich keine code tags gesetzt, weil das vollends
aus den Fingern gesogener Versuchsaufbau wäre,
Ich glaube übrigens, dass Du eventuell keine "zwischengespeicherten
Werte"
nutzen kannst beim zweiten Translate, da sich width und height
vertauscht haben könnten (naja oder Du musst halt auch tauschen)
Aber wie gesagt, ich weiss es nicht wirklich, ich rate nur mit quasi ;)
sid schrieb:> weiss aber, daß viele rotate implementationen schlicht und ergreifend um> origin rotieren.
Das tun sogar ausnahmlos alle. Denn: eine Rotation muss nunmal um
irgendeinen Punkt herum passieren, sonst kann es keine Rotation sein...
Das Problem ist der Bezug von "origin". Also: In welchem
Koordinatensystem ist dieser Punkt anzugeben...