Jump to content

[delphi] Umieszczenie obrazu na komponencie image z bufora pliku jpg


sybic

Recommended Posts

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

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

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

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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...