2010-12-14 11 views
5

Tworzę aplikację, która wizualizuje ramkę obrazu tak, jak projektuje ją użytkownik. Aby utworzyć ramkę, rysuję 4 wielokąty, które reprezentują fizyczne kawałki drewna i używają TextureBrush do wypełnienia.Tworzenie wieloboku wypełnionego kafelkowym obrazem w języku C#

Działa to doskonale na lewą i górną krawędź. Jednak dla dolnej i prawej krawędzi ta metoda nie działa. Wydaje mi się, że TextureBrush jest układany od punktu (0,0) na obrazie, a nie w wielokopi, który narysowałem. W rezultacie płytka nie jest wyrównana z wielokątem. Dostosowując rozmiar obrazu, mogę idealnie dopasować kafelek do linii.

Jak utworzyć dowolnie rozmieszczony wielokąt i wypełnić go kafelkowym obrazem, poczynając od punktu (0,0) wewnątrz wielokąta, a nie płótna?

Nie jestem dołączony do FillPolygon i TextureBrush, jeśli istnieje lepsze rozwiązanie.

Przykład

alt text

Odpowiedz

4

Właśnie znalazłem odpowiedź. Grałem z dodawaniem BoundingBox do konstruktora TextureBrush, ale wciąż otrzymywałem wyjątki OutOfMemory i uważałem, że nie rozumiem. Okazuje się, że jest to błąd w .NET

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

Prace wokół jest użycie transformacji, aby przesunąć teksturę

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

Matrix mtx = brush.Transform; 
mtx.Translate(xoffset, 0); 
brush.Transform = mtx; 
Powiązane problemy