Wyswietlenie JPEG z pliku

0

Czy ktos wie jak mozna wyswietlic na komponecie obrazek JPEG jesli w pliku mam kilka obrazkow wiem gdzie sie zaczyna i konczy kazdy z nich.

0

Może podziel to na osobne pliki, albo skorzystaj z TStream (jest chyba TJPEGStream)

0

Mhh
chodzi mi o to ze mam plik w ktorych mam kilka obrazkow jpeg
znam pozycje i wielkosc kazdego z nich (gdzie sie zaczyna i ile bajtow ma dlugosci). Zaladuje sobie te dane np do dynamicznej tablicy (array of byte) ale nie wiem jak pozniej te dane przeniesc do komponentu aby wybrany obrazek wyswietlic.

Wiem ze najprosciej by bylo zapisac ta tablice w pliku i wtedy juz nie bedzie problemu.

0

piszę z głowy wiec bez bicia :

const
ileObrazkow = 5;

var
Bufor : array[0..ileObrazkow] of TBitmap;
i : byte;

begin
for i := 0 to ileObrazkow do begin
Bufor[i] := TBitmap.Create;
Bufor[i].width := // tu wpisz ile ma miec ten obrazek długosci
Bufor[i].heigth := // --||-- wysokosci
Bufor[i].PixelFormat := pf24bit;
Bufor[i].canvas.CopyRect(bufor[i].canvas.cliprect,image1.canvas, rect(x1,y1,x2,y2), );
end;

end;

za x1, x2, y1, y2 podstawiasz wspolrzedne obrazkow po kolei
nie zapomnij potem zwolnic pamieci z Bufor!
pozdrawiam!

0

?? a co mi to da gdzie tu wpastawic tablice z odczytanymi danymi ??
Te pliki to sa JPEG a nie BMP

0

Te pliki to sa JPEG a nie BMP

Każdy JPG ma swój Canvas.. :) a bitmapki zapisywane są w pamięci, tak żebyś mógł się nimi potem posługiwać. A tablice wstawiasz po kolei pod x1,x2,y1,y2.. a moze ja cie zle zrozumialem..


AAAAA teraz zrozumiałem! sorry, to co piaslem nie na temat bylo.. ja myslalem ze masz plik jpg, w którym są połączone małe obrazki w jeden duży (coś a'la kadr filmowy) sorry.

0

No wlasnie po prostu to jest taka baza danych w dwoch plikach w jednym mam index'y (pozycja, rozmiar) dla kazdego obrazka a w drugim pliku wszystkie obrazki, I teraz nie wiem jak wyswietlic taki obrazek bez zapisywania go na dysku.

0

Skorzystaj z TStream, to jest dobre rozwiązanie.

L0f1X: Pamiętaj o dodaniu do Uses modułu JPEG.

0

Spoko skorzystam ale co mi to da ...
przez TFileStream odczytuje mi tylko 4 poczatkowe bajty naglowka JPEG "˙Ř˙ŕ" i wiecej nic nie laduje do buffora - zreszta ja dane juz mam zaladowane do buffora chce tylko je jakos wyswietlic ale jakos nie wiem jak jesli to w ogóle mozliwe.
Buffor jest typu: array of byte;
na poczatku funkcja SetLength ustawiam jego wielkosc pozniej w petli laduje do niego poszczegolne bajty z odczytywanego pliku.
i
no wlasnie co dalej

0

var
Buf: array of Byte;
Mem: TMemoryStream;
JPEG: TJPEGImage;
begin
Mem := TMemoryStream.Create;
Mem.Write(Buf, SizeOf(Buf));
JPEG := TJPEGImage.Create;
JPEG.LoadFromStream(Mem);
// Tutaj rób co chcesz
JPEG.Free;
Mem.Free;
end;

Oczywiście założenie jest takie, że Buf zawiera jeden obrazek. Czyli masz to już podzielone.

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