rozciąganie grafiki

0

Potrzebuję napisać następujący program:
Są dwie zmienne typu bitmap. Do jednej jest wczytany obraz lub zdjęcie, a druga jest pusta. Podaje się dowolne współrzędne wszystkich czterech narożników bitmapy. Nie musi to być prostokąt, może to być równoległobok, trapez lub nawet trapezoid. Na drugiej bitmapie program rysuje kształt uzyskany pomiędzy tymi czterema punktami, a w nim rozciągniętą bitmapę.

Przykład wczytywanego obrazka:
http://img82.imageshack.us/img82/169/oryginaliz8.png

Ten sam obrazek obrobiony:
http://img208.imageshack.us/img208/1738/obrobionydo9.png

Jak napisać taką procedurę?

0

To nic innego jak zwykłe nakładanie tekstury na QUAD'ach

dodam jeszcze że stosuje się w tym celu interpolacje liniową ( i dobrze jest skorzystać z bilinealnego rozmycia )

0

Jednak chodzi mi o grafikę 2D, a nie 3D. Niektóre programy graficzne, np. Photoshop potrafią tak przerobić bitmapę.

0
andrzejlisek napisał(a)

Jednak chodzi mi o grafikę 2D, a nie 3D. Niektóre programy graficzne, np. Photoshop potrafią tak przerobić bitmapę.

Nakładanie tekstur odbywa się w grafice 2D! Wystarczy ze poczytasz o tym algorytmie i już będziesz wiedział o co chodzi.

0

Tylko jak się ten algorytm nazywa? Chodzi o to, co wpisywać w Google.

0

Jak nie chcesz kombinować i mieć sporo dodatkowych opcji to możesz to narysować w OpenGL'u
a pÓźniej zczytać to do bitmapy.

Ale uprzedzam że możesz stracić na szybkości, tworzenie tekstury trochę trwa.

A tak poza tym to chyba lepszego(szybszego) rozwiązania nie ma.
(No chyba że jakaś gotowa biblioteczka)

Pozdrawiam

0

przeczytaj sobie to :
Programowanie 3D cz. III

najważniejsza jest część o gouraund, ponieważ teksturowanie działa identycznie, z tym że zamiast c1 mamy u1, v1, zamiast g2 mamy u2,v2 i analogicznie dla 3.
i teraz w procedurze rysującej linię wpisujesz punkt o kolorze zrodlo [ u, v ].
u,v <- to są koordynaty tekstury.
czyli u2,v2 to nic innego jak współrzędne teksela (piksela obrazka źródłowego ) dla wierzchołka trójkąta o numerze 2 :P
Miałem kiedyś to opisać ale niestety zabrakło czasu :]

Żeby to ładnie wyglądało to powinieneś dodać jeszcze bilinealne filtrowanie i dobrze byłoby zastosować korekcje perspektywy. Btw. mogę zamieścić źródło procedurki teksturowania + bilinealne filtrowanie ale w C

1 użytkowników online, w tym zalogowanych: 0, gości: 1