2010-12-14 20 views
5

Estoy creando una aplicación que visualiza un marco de imagen a medida que el usuario lo diseña. Para crear el marco, dibujo 4 polígonos que representan los fragmentos físicos de madera y el uso de TextureBrush para rellenarlo.Crear un polígono relleno con una imagen de mosaico en C#

Esto funciona perfectamente bien para los bordes izquierdo y superior. Sin embargo, para los bordes inferior y derecho, este método no funciona. Me parece que TextureBrush se está embaldosando desde el punto (0,0) en la imagen y no dentro del polígono que he dibujado. Como resultado, el mosaico no se alinea con el polígono. Ajustando el tamaño de la imagen, puedo hacer que el mosaico se alinee perfectamente.

¿Cómo creo un polígono colocado arbitrariamente y lo lleno con una imagen de mosaico, comenzando desde el punto (0,0) dentro del polígono, no desde el lienzo?

No estoy vinculado a FillPolygon y TextureBrush si hay una solución mejor.

Ejemplo

alt text

Respuesta

4

me acaba de encontrar la respuesta. Estaba jugando con la adición de BoundingBox al constructor TextureBrush, pero seguí recibiendo excepciones de OutOfMemory y pensé que no era yo quien lo entendía. Resulta que es un error en el marco .NET

http://connect.microsoft.com/VisualStudio/feedback/details/90973/texturebrush-constructor-throws-out-of-memory-exception-when-providing-the-bounding-rectangle

La solución es utilizar una transformación para mover la textura

var brush = new TextureBrush(new Bitmap(imagefile)); 

Matrix mtx = brush.Transform; 
mtx.Translate(xoffset, 0); 
brush.Transform = mtx; 
Cuestiones relacionadas