Przechowywanie dużej ilości obrazów

0

Cześć.

W mojej aplikacji planuję wykonać formatkę, gdzie będą przechowywane duże ilości zdjęć. Coś podobnego do przeglądarki graficznej z tą różnicą, że tutaj nie byłyby to miniaturki, tylko realne fotografie.

Niestety wczytanie - np. 100 obrazów o wielkości 4000x4000 spowoduje wysypanie programu, albo po prostu skończenie pamięci.
Mimo to wiele programów potrafi wczytać obrazy i je wyświetlać niezależnie od wielkości i ich ilości (oczywiście w założeniach normalności).

Jak te aplikacje to robią?
Przekształcają jakoś obrazy?

0

Nie wczytuj wszystkich obrazków, tylko te, które wyświetlasz.
A jeśli wyświetlasz wszystkie, to generuj miniaturki, zamiast trzymać w pamięci wielkie bitmapy.

0

Nie no, to jest oczywiste, ale sprawa wygląda tak, że nie mogę przechowywać miniaturek, gdyż każdy z tych obrazów będzie modyfikowany. Modyfikowanie miniaturki mija się z celem.

Modyfikacja pojedynczych plików jeden po drugim również jest niemożliwa z powodów biznesowych.

Aplikacje graficzne potrafią wczytać plik - obraz o dużej wielkości nie zajmując przy tym wiele miejsca. u mnie natomiast zajmuje to bardzo wiele fizycznej pamięci. Zastanawiam się po prostu jak owe programy to robią.

0

Na pewno żaden program nie wczytuje wszystkich obrazków na raz.
Niektóre nawet nie wczytują jednego obrazku w całości (w zastosowaniach Pro mogą zajmować naprawdę dużo miejsca).

Czy musisz wykonywać operacje graficzne na wszystkich obrazkach jednocześnie?
W takim razie rób to na dysku lub zapisuj tylko warstwę którą potem połączysz z nimi.

Trochę mało napisałeś jak ma wyglądać ta edycja.

Te obrazki co opisałeś nie są jakieś duże, ale po zsumowaniu przekraczają 4 GB, i może to jest przyczyna - programujesz w 64 bitach?
Pomijając to i tak się zastanów czy musisz na pewno je wszystkie wczytywać.

0

Program Adobe Photoshop posiada opcję "Dysk magazynujący", w którym podaje się dysk lub katalog do zapisu danych roboczych. Jeżeli nie zapewni się odpowiedniej ilości wolnego miejsca, to wykonanie operacji na obrazie może nie być możliwe.

Z tego wnioskuję, że postaci pośrednie i tymczasowe podczas obróbki obrazu są przechowywane na dysku, ale nie wiem, czy to jest prawda.

0

Up: Tak zgadza się i sprawdziłem to. Rzeczywiście tego typu aplikacje tworzą kopie obrazów na dysku, dzięki czemu oszczędzają pamięć fizyczną.

Problem jest jednak jeszcze jeden. Otóż na stronie głównej programu Photoshop jest napisane:
"Photoshop supports a maximum file size of 300,000 x 300,000 pixels"
Czyli Photoshop akceptuje obrazy do wielkości 300,000x300,000 pikseli. Taki obraz to 90000000000 pikseli = 360000000000 bity (wraz z kanałem alpha) = 335.276127 GB w pamięci (jeśli dobrze liczę te kolosalne liczby).

Pomijając kwestie super uber mega wypas komputera który by musiał być by coś takiego uruchomić, to... jak oni to do cholery robią?
Jak możliwe jest wczytanie takiego giganta bez wywalenia programu?
U mnie gdy wczytuję do aplikacji obraz o wielkości 15,000x15,000 wywala się program błędem GDI+. Jak oni robią takie cuda?

0
ProgGraf napisał(a):

Jak możliwe jest wczytanie takiego giganta bez wywalenia programu?

Nie wczytują tylko przetwarzają fragmentami. Po co wczytywać 90mld pikseli, skoro najlepsze monitory wyświetlają chyba 4 miliony? Nawet jeśli zestawić ich 20, to i tak potrzeba na raz najwyżej 80mln pikseli, a to jest nic dla dzisiejszych komputerów.

0

gdyż każdy z tych obrazów będzie modyfikowany
Jednocześnie?

Modyfikacja pojedynczych plików jeden po drugim również jest niemożliwa z powodów biznesowych.
Bzdura.

0

Bzdura

Haha bo Ty wiesz do czego to potrzebne i wiesz jakie są założenia :D.

Ech... przestań robić offtop i się ośmieszać. Temat do zamknięcia, gdyż problem się rozwiązał nieco w inny sposób. Dziękuję za pomoc pozostałym osobom.

0

Do pamięci musisz załadować tylko tyle danych ile musisz pokazać naraz. Czyli = aktualna rozdzielczość ekranu.
Reszta może być sprytnie obrabiana regionami, nawet z zastosowaniem pliku roboczego typu PBM (piksele ekranu łatwe do odnalezienia na dysku).

0
ProgGraf napisał(a):

Haha bo Ty wiesz do czego to potrzebne i wiesz jakie są założenia :D.

Założenia są niespójne, by nie rzec zabawne.

Jeżeli chcesz przetwarzać wszystkie obrazy na raz, to możesz ich przetwarzać tylko tyle, ile rdzeni ma procesor, czyli w domowych zastosowaniach najwyżej 8. Osiem to dla Ciebie duża ilość?

Jeśli klient/użytkownik biznesowy powiedział, że chce aby wszystko było robione na raz, to nie znaczy, że programista ma tak zrobić. To programista jest fachowcem, i ma wiedzieć, co jest, a co nie jest możliwe, co ma sens, a co go nie ma.
Jeśli wymagania są niemożliwe do spełnienia lub bezsensowne, to trzeba to wyjaśnić i zaproponować realne rozwiązanie. Zwłaszcza, jeśli użytkownik i tak nie jest w stanie ocenić, jak coś jest wykonywane.

0

Jeśli wymagania są niemożliwe do spełnienia lub bezsensowne, to trzeba to wyjaśnić i zaproponować realne rozwiązanie. Zwłaszcza, jeśli użytkownik i tak nie jest w stanie ocenić, jak coś jest wykonywane.

Tak też zrobiłem ,dlatego napisałem iż można zamknąć temat. Po prostu wczytuję obraz z dysku, przetwarzam, zapisuję, biorę kolejne zdjęcie z dysku, przetwarzam, zapisuję... itd. aż do X.
Chodziło o to, że mniej więcej w tym samym czasie - dla użytkownika to ten sam czas, bo on tylko sobie raz kliknie myszką.

Dziękuję za rady.

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