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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top