Strona 1 z 1

Przechowywanie bitmap

Nowy postNapisane: czwartek, 21 maja 2009, 02:37
przez Matthew
Witam,

Mam kolejny problem ;] Chodzi tym razem o przechowywanie bitmap. Poczatkowo robilem vector bitmap, ktory sprawowal sie swietnie, do momentu, gdy licznik jego elementow przekroczyl jakas magiczna granice. Wtedy to tez otrzymalem komunikat o 'braku miejsca w magazynie dla wykonania tej instrukcji'. Pomyslalem, ze przedobrzylem z iloscia uchwytow (chociaz bylo ich raptem kolo 100), z drugiej jednak strony musze miec staly dostep do bitmap, wiec jakies czyszczenie w trakcie pracy programu nie wchodzi w gre. Pomyslalem, ze wrzuce te bitmapy do ImageList. Wszystko cacy do momentu gdy sie okazalo, ze rozmiar bitmap przechowywanych w imagelist musi byc z gory okreslony i taki sam dla kazdej (a moje bitmapy sa roznego rozmiaru). I teraz pytanie. Jak madrze przechowac bitmape? Moze jest jakis doskonalszy sposob niz idiotyczny imagelist... :/ Bardzo prosze o pomoc, bo mi pomysly skonczyly sie juz niestety :[

Re: Przechowywanie bitmap

Nowy postNapisane: czwartek, 21 maja 2009, 11:05
przez polymorphism
Pomyslalem, ze przedobrzylem z iloscia uchwytow (chociaz bylo ich raptem kolo 100)

Tu nie chodzi o ilość uchwytów, tylko o ilość dostępnej pamięci na bitmapy DDB. Podejrzewam, że te 100 bitmap łącznie niemało zajmuje, no chyba że gdzieś w programie bawisz się czystym winapi i nie zwalniasz poprawnie bitmap, co skutkuje wyciekami pożerającymi zasoby.

Re: Przechowywanie bitmap

Nowy postNapisane: piątek, 22 maja 2009, 13:09
przez Cyfrowy Baron
Ja zastanawiam się nad sensem i praktyczną stroną przechowywania takiej liczby bitmap w pamięci. To musi wcześniej czy później zaowocować przepełnieniem pamięci. Nie napisałeś co robisz, co robi Twój program, ale nie spotkałem się jeszcze w żadnym programie z podobnym rozwiązaniem, na ogół w przypadku tak dużej liczby bitmap są one w miarę potrzeb wczytywane z dysku, nawet przeglądarki grafiki, które wyświetlają przecież czasami kilka tysięcy miniaturek grafik, nie przechowują ich wszystkich w pamięci, a jedynie przechowują ścieżki dostępu do tych plików, a wyświetlają tworzone dynamicznie miniaturki tychże grafik, więc może powinieneś stworzyć coś podobnego.

W programie który właśnie kończę zastosowałem bufor przechowujący w pamięci grafiki w formacie JPEG, ale dotyczy to raptem 6 plików, nie posługiwałem się jednak wektorem lecz tablicą:

Kod: Zaznacz cały
TJPEGImage *JpegTitle[6];

for(int i = 0; i < 6; i++)
  JpegTitle[i] = new TJPEGImage();