Pregunta

¿Hay una manera de dibujar / encajar un simple cuadrilátero recorte de una imagen en un rectángulo eje alineado estándar para la visualización de la pantalla. (Para que el recorte será distorsionada para llenar los puntos del rectángulo). Me parece que debería ser posible con un ImageBrush pero no puede verlo del todo.

¿Fue útil?

Solución

Sí, pero oscila entre extremadamente fácil algo difícil dependiendo de su cuadrilátero.

Alineados rectángulo

Si el cuadrilátero es un rectángulo alineado con los ejes, puede utilizar CroppedBitmap.

rectángulo Unaligned u otro paralelogramo

Si el cuadrilátero es un paralelogramo arbitrario (incluyendo rectángulos), se puede utilizar un RenderTransform para mapear las esquinas de la quatrilateral a los límites del rectángulo y ClipToBounds set = "true" para que sólo los programas de recorte.

<Decorator ClipToBounds="true">
  <Rectangle Fill="{StaticResource SourceImage}" RenderTransform="1 0 0 1 0 0" />
</Decorator>

Mediante la variación de los parámetros de la matriz en la RenderTransform cualquier paralelogramo puede ser mapeada en el rectángulo. álgebra sencilla dará los detalles. Sólo tiene que conectar los cualquiera de las tres esquinas del paralelogramo en la matriz transformar ecuación y resolver para los seis transformada parámetros.

arbitraria cuadrilátero

Si no cuadrilátero es un paralelogramo, tendrá que utilizar un no-transformación afín que no está disponible en gráficos 2D de WPF. Sin embargo, está disponible en el sistema 3D: Usted tendrá que crear cuatro objetos anidados:

  • A MeshGeometry3D para definir la forma del rectángulo dentro de un
  • GeometryModel3D para definir el material (su ImageBrush) dentro de un
  • ModelVisual3D para definir su transformación dentro de un
  • Viewport3DVisual para definir la cámara y el puerto de vista.

el blog de Charles Petzold tiene los cálculos para la solución 3D.

Otros consejos

Si usted quiere decir que desea mostrar una imagen recortada, puede utilizar CroppedBitmap .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top