sybic Posted November 1, 2010 Report Share Posted November 1, 2010 Na komponencie image wyświetlam grafikę ładując pliki jpg metodą LoadFromFile Image1.picture.LoadFromFile(nazwa); Problem w tym, że tych plików jest prawie tysiąc ale są bardzo krótkie. Postanowiłem więc, że wrzucę je do jednego pliku (zwyczajnie łącząc cat *.jpg > bmp.bin), który załaduje podczas uruchomieniu programu i do którego zorganizuje sobie dostęp. Pozycja tablicy i rozmiar. Mam więc adres i rozmiar ... ale jak to teraz wrzucić do image1? Link to comment Share on other sites More sharing options...
olesio Posted November 1, 2010 Report Share Posted November 1, 2010 Nie do końca wiem czy dobrze Ciebie zrozumiałem, ale możesz załadować plik tekstowy z nazwami samych plików do TStringList, zadeklarowanej w sekcji public. I później ładować na przykład Image1.LoadFromFile(SL[0]); to zaladuje plik o nazwie podanej pierwszym wierszu pliku. Możesz też, o ile nie musisz mieć tych plików na dysku, ładować je z zasobów, czyli będziesz je miał w pliku exe. Plik exe możesz zawsze spakowac chocby UPXem aby zmniejszyć jego rozmiar. Więcej informacji o zasobach masz oczywiście w google. Tylko przy bardzo dużej ilości plików w zasobach, lepiej zamiast nazw nadawać im liczbowe identyfirkatory, na przykład: #1 rcdata "plik0001.jpg" a później tworzyć ResourceStream nie przez Create ale przez CreateFromID. na google znajdziesz przyklady i info. Pozdrawiam: olesio Link to comment Share on other sites More sharing options...
sybic Posted November 1, 2010 Author Report Share Posted November 1, 2010 Jpegów do exe nie chciałbym ładować, bo z pewnych względów chciałbym aby ten plik nie był za długi. Wszystkie jpegi mam już w binarnym pliku, który ładuje cały podczas uruchomienia programu. Punkty wejścia i rozmiary plików, a także ich nazwy też są mi znane. Procedurą BlockWrite dowolny plik mogę więc zapisać na dysku. Żądany efekt mogę więc uzyskać poprzez BlockWrite, a następnie przez LoadFromFile, ale to trochę pokrętna metoda, bo przecież dane mam już pamięci i chodzi tylko o to, aby dane z właściwego pliku, jakoś 'wcisnąć' do image1. A może łatwiej byłoby gdyby zamiast jpg były pliki bmp? Link to comment Share on other sites More sharing options...
olesio Posted November 1, 2010 Report Share Posted November 1, 2010 Pliki mogą być dowolne graficzne, o ile będzie umiał je załadować komponent Image, co w praktyce dla plikow innych niż birmapy wymaga dodania modułów typo Jpeg lub gifimage lub pngimage itd. Chyba już rozumiem co chcesz osiągnąć. Jeżeli chcesz mieć zapisane wszystkie grafiki- w jednym, dużym pliku z danymi to przeanalizuj sobie kod źródlowy programu, który wrzuciłem pod adresem: http://www.speedyshare.com/files/24978152/prosta_baza.rar zapisuje on poza samą grafiką parę dodatkowych danych tekstowych, ale powinieneś zrozumieć ideę, wystarczy że zapiszesz sobie tak jak ja typ pliku graficznego w zmiennej typu wyliczeniowego (co jest zbędnę jeżeli założysz, ze do pliku dodasz tylko na przykład jpegi i nic innego), a poza tym rozmiar danego pliku i to wystarczy. Do wczytywania oraz zapisywania polecam skorzystać raczej ze strumienia plików albo pamięci, w tym kodzie używam TMemoryStream. Pakowanie algorytmem ZLib jest opcjonalne - lecz może się przydać jeżeli nie chcesz aby ktoś w łatwy sposób "wypruł" sobię grafikę lub podejrzal inne dane. Pozdrawiam: olesio Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.