2012-05-03 9 views
6

Pracuję nad aplikacją, która rysuje matrycę - za pomocą Java 2D - która może stać się dość duża, na przykład 30000 x 30000 pikseli. W tej chwili trochę eksperymentowałem z BufferedImage, ale stworzenie tak dużego BufferedImage powoduje, że poza pamięcią wyjątków, nawet przy powiększaniu sterty. Teraz zastanawiałem się nad podzieleniem obrazu na kilka obrazów/regionów, a kiedy skończę w pewnym regionie, zapisz go na dysku i utwórz nowy region/BufferedImage i kontynuuj rysowanie. Jestem zainteresowany myślami innych ludzi o tym, jak sobie z tym poradzą. Byłem z dala od Javy przez jakiś czas, więc wszelkie konkretne przykłady są mile widziane.Tworzenie i rysowanie ogromnych (buforowanych) obrazów w Javie

+0

Czy możesz napisać swój kod? – eabraham

Odpowiedz

3

Przyczyniam się do nowego/małego projektu open source, który może być bardzo dobrze dopasowany do twoich potrzeb.

Projekt to Glimpse. Ma on na celu pomoc w tworzeniu wizualizacji danych 2D w Javie, ze szczególnym uwzględnieniem obsługi dużych zbiorów danych oraz ułatwienia w czasie rzeczywistym interaktywności, aby umożliwić łatwą eksplorację danych.

Glimpse Head Map

Wykorzystuje OpenGL skorzystać z funkcji sprzętowych na nowoczesnych kart graficznych, takich jak pamięci tekstur i shaderów aby osiągnąć powyższe cele. Więc jeśli używasz Java2D, to ci nie pomoże. Panele Glimpse można jednak umieszczać obok siebie razem z innymi komponentami Swing, dzięki czemu łatwo można go umieścić w istniejącym GUI Swing. Jedyne zastrzeżenie, że potrzebujesz porządnej karty graficznej.

Obraz jest przykładem dużej matrycy danych, której kolorystyka jest dynamicznie dostosowywana za pomocą skali kolorów po prawej stronie (dane matrycy są przechowywane w teksturach GPU, a dynamiczne przebarwianie odbywa się za pomocą niestandardowego modułu cieniującego). Źródłem tego przykładu jest HeatMapExample.java. Istnieje wiele innych podobnych przykładów, które stanowią punkt wyjścia do pracy z innymi funkcjami Glimpse.

Możesz dowiedzieć się więcej na stronie glimpse.metsci.com. Na pierwszej stronie znajduje się wideo wstępne wraz z Java WebStart examples. Źródło znajduje się pod adresem GitHub.

+0

Interesujące, na pewno zajrzę w to. Dzięki. – RBaarda

1

jeśli po prostu chcesz, aby wygenerować obraz na dysku, a następnie spójrz na pngj - może generować duże PNG bez żadnych problemów, ponieważ pisze wierszy pikseli na dysku są one dostępne. api jest trochę specyficzne dla png, ale nie jest zbyt skomplikowane (może pomóc odczytać małe tło w formacie obrazu png przed jego użyciem).

+0

Dzięki za odpowiedź. Zajrzałem do pngj, ale wciąż zastanawiam się, jak narysować na przykład obraz BufferedImage przy użyciu pngj. – RBaarda

+0

nie zrobiłbyś tego. Myślałem, że problem polega na tym, że buforowany obraz zajmuje zbyt dużo pamięci? pngj omija to - zapisujesz piksele bezpośrednio na dysku. Przepraszam, jeśli źle zrozumiałem. –

+0

Przepraszamy za kłopot, ale masz rację, to jest problem. Pozwolę sobie to ująć w ten sposób, w jaki sposób wykorzystałbyś api Java 2D wraz z PNGJ? – RBaarda

Powiązane problemy