Prosty edytor map 2D

0

Witam, mam na zadanie napisać edytor map 2D. Każda mapa składa się z 3 warstw. Elementy map są plikami w .png (wraz z alphą). Pomyślałem, żeby wrzucić do scrollboxa 3 komponenty image i jeden image z boku. Te komponenty w scrollboxie były by warstwami a ten boczny to elementy możliwe do umieszczenia. Jednak pojawił się już problem, bo niestety nie mogę kopiować z obrazków .png. Myślałem zamianę image na paintbox lub konwertowanie tych .png do bitmapy 32 bitowej. Chciałbym móc też oddalać mapę (autosize + zmiana wielkości obrazka, chociaż nie wiem czy to dobry pomysł) oraz ustawić przezroczystość danej warstwy żeby móc zobaczyć co jest pod (tutaj jedynie przyszło mi do głowy kopiowanie danej warstwy i dodanie wartości alpha). Ostatecznie myślałem nad Open GL lub DirectX tylko, czy opłaca się używać tego dla tak prostych celów? Chciałbym poznać opinię bardziej doświadczonych programistów, jaki sposób będzie lepszy.

Pozdrawiam

0

czy opłaca się używać tego dla tak prostych celów
to nie są takie znowu proste cele.

niestety nie mogę kopiować z obrazków .png
nie bardzo rozumiem: użyj takiego komponentu, by móc operować na bitmapie.

0

Bitmapą mogę operować, tylko z .png jest już problem, a dokładnie z canvasem bo to on wymaga wyłącznie bitmapy.

Nikt inny się nie wypowie?

0

Png też ma canvas.
Kopiuj za pomocą BitBlt.

0

A ja bym się pobawił i trzymał dane mapy w jakiejś sensownej formie a nie bitmap 1000000x1000000 pikseli (x 3 warstwy). Chodzi o to, że trzymasz sobie w tablicy dwuwymiarowej trójki jakichś danych (dla każdej warstwy) i rysujesz "ręcznie" na jakimś PaintBoxie to, co aktualnie jest widoczne. Jest to szybsze, mniej pamięciożerne i bardziej elastyczne. Możesz łatwo włączać/wyłączać to, co ma być rysowane (i jak).

0

_13th_Dragon
Próbuję tak:

var
  img2, img3: HDC;

[...]

  img2 := Image2.Canvas.Handle;
  img3 := Image3.Canvas.Handle;

  BitBlt(img2, 0, 0, 50, 50, img3, 0, 0, SrcCopy);

Jednak nie działa jak powinno.

[losowa nazwa]
Oczywiście mam zamiar trzymać dane tak jak mówisz, tylko interesuje mnie wizualna oprawa tego edytora. Jak rozwiązać ten problem warstw, przezroczystości itp.

0

SrcCopy to za mało aby mieć przezroczystość.
Przeanalizuj kod rysowania np Glyph'a przy przycisku.

0

Nie bardzo rozumiem, mógłbyś trochę jaśniej?

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