WPF Mappatura Immagine
-
29-09-2019 - |
Domanda
C'è un modo per disegnare / montare un semplice quadrilatero ritaglio da un'immagine su un rettangolo asse allineato standard per la visualizzazione sullo schermo. (In modo che il cut-out sarà distorto per riempire i punti rettangolo). Mi sembra che dovrebbe essere possibile con un ImageBrush ma io non riesco a vederlo.
Soluzione
Sì, ma varia da estremamente facile da un po 'difficile a seconda del quadrilatero.
Allineati rettangolo
Se il quadrilatero è un rettangolo allineato agli assi, è possibile utilizzare CroppedBitmap.
rettangolo Unaligned o altro parallelogramma
Se il quadrilatero è un parallelogramma arbitraria (compresi rettangoli), è possibile utilizzare un RenderTransform per mappare gli angoli del quatrilateral ai limiti del rettangolo e ClipToBounds set = "True" in modo che solo gli spettacoli ritaglio.
<Decorator ClipToBounds="true">
<Rectangle Fill="{StaticResource SourceImage}" RenderTransform="1 0 0 1 0 0" />
</Decorator>
Variando i parametri della matrice sulla RenderTransform qualsiasi parallelogramma può essere mappato sul rettangolo. Semplice algebra darà i dettagli. Basta collegare gli eventuali tre angoli del parallelogramma nella matrice trasformare equazione e risolvere per la trasformazione di sei parametri.
arbitraria quadrilatero
Se il quadrilatero non è un parallelogramma, è necessario utilizzare un non-trasformazione affine che non è disponibile nella grafica di WPF 2D. Tuttavia è disponibile nel sistema 3D: Sarà necessario creare quattro oggetti nidificati:
- A MeshGeometry3D per definire la forma del rettangolo dentro un
- GeometryModel3D per definire il materiale (il vostro ImageBrush) all'interno di un
- ModelVisual3D per definire la trasformazione all'interno di un
- Viewport3DVisual per definire la macchina fotografica e della vista.
il blog di Charles Petzold ha i calcoli per la soluzione 3D.
Altri suggerimenti
Se vuoi dire che si desidera mostrare un'immagine ritagliata, è possibile utilizzare CroppedBitmap
.