Pliki typowane i TBitmap

0

Piszę program, w którym do pliku rekordowego chcę zapisać zmienną

var Obrazek:TBitmap;

Z tego co wyczytałem w googlach i na 4p. nie tak prosto zapisać ten typ bo to nie jest zmienna o stałym rozmiarze. Probowałem to jakoś obejść ale z marnym skutkiem. Ma ktoś może jakiś pomysł jak zapisać TBitmap do pliku rekordowego?Może jakaś biblioteka, fragment kodu, co kolwiek. Będę wdzięczny. Już pare tygodni się z tym męczę aż w SPACJA końcu piszę. Z góry dzięki. [email protected] gg:354534

0

TBitamp to klasa, a zmienna jest wskażnikiem na konkretny egzemplarz tej klasy. Zapisując zmienną do pliku zapiszesz jedynie adres pod którym znajdue się ezgamplarz klasy.
Moja rada: próbuj strumieniami. Zapisuj po kolei pola rekordu do strumieniam, potem zapisz obrazek do oddzielnego strumienia i dopisz go do podstawowego strumienia. Pocztyjaw help'ie o klasa TMemoryStream i TFileStream i o metodzie TBitmap.SaveToStream.

0

Do pliku typowanego za bardzo sie nie da, ale możesz spróbować strumieniem w ten sposób, że pierw podajesz wielkość bitmapy, a zaraz za wielkością zapisujesz strumień Bitmapy, potem wielkość kolejnej bitmapy i znow stumien Bitmapy i tak w kolko.

Możesz tez spróbować XMLa. Będzie to wygodniejszy i bezpieczniejszy sposób.

0

było niedawno - szukaj

0

Nie wiem nic o strumieniach ale widze ze bede musial sie nauczyc :) Dam znac jak roziwaze problem a tymczasem jakby cos ktos jeszcze wiedzial czy widzial gdzies to bede wdzieczny. Zabieram sie do pracy

0

Może nie będzie to zbyt eleganckie rozwiązanie, ale plan jest taki:

1). Zapisujesz bitmapę za pomocą SaveToFile np:

Image1.Picture.SaveToFile('Plik.bmp');

2). Przez GetMem przydzielasz pamięć zmiennej typu Pointer o rozmiarze FileSize

GetMem(Buf, FileSize('Plik.bmp'));

3). Za pomocą BlockRead/BlockWrite możesz zapisywać kolejno obrazki w jeden plik
4). Potrzebujesz jeszcze informacji, gdzie się kończy pierwsza bitmapa, a zaczyna druga, tak więc na samym początku pliku zapisz tablicę, która będzie przechowywała rozmiary poszczególnych bitmap, dzięki temu obliczenie pozycji w pliku będzie dziecinnie proste.

Jak coś nie zrozumiałe to pisz.

0

w Delphi chyba jest parser XML albo mozna doinstalowac, a wtedy taki plik by wygladał tak:

<xml>
  <rekord>
    <pole1> wartosc </pole1>
    <pole2> wartosc </pole2>
    <bitmapa> tutaj zapisany plik </bitmapa>
  </rekord>
</xml>

bo o ile pamietam w XMLu można zapisywać pliki binarne, wiec bitmape tez tam wcisciesz.

0

Ze strumieniami nic mi nie wychodzi wiec spróbuję z

BlockRead

BlockWrite

Dzieki za pomysly. Jesli jeszcze ktos ma jakies to piszcie smiało

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