2010-12-14 19 views
5

Je crée une application qui visualise un cadre d'image tel que l'utilisateur le conçoit. Pour créer le cadre je dessine 4 polygones qui représentent les morceaux de bois physiques et en utilisant un TextureBrush pour le remplir.Créer un polygone rempli d'une image en mosaïque dans C#

Cela fonctionne parfaitement bien pour les bords gauche et supérieur. Cependant, pour les bords inférieurs et droits, cette méthode ne fonctionne pas. Il me semble que le TextureBrush est en mosaïque à partir du point (0,0) sur l'image et non dans le polygone que j'ai dessiné. Par conséquent, la mosaïque ne s'aligne pas avec le polygone. En ajustant la taille de l'image, je peux obtenir la tuile à aligner parfaitement.

Comment créer un polygone positionné arbitrairement et le remplir avec une image en mosaïque, en commençant par le point (0,0) dans le polygone, pas le canevas?

Je ne suis pas attaché à FillPolygon et TextureBrush s'il y a une meilleure solution.

Exemple

alt text

Répondre

4

Je viens de trouver la réponse. Je jouais avec l'ajout d'un BoundingBox au constructeur TextureBrush mais j'ai continué à obtenir des exceptions OutOfMemory et j'ai pensé que c'était moi qui ne comprenais pas. Il s'avère que c'est un bogue dans le .NET framework

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

Le travail est autour d'utiliser une transformation pour déplacer la texture

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

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