Witam,
mam problem z odczytem plikow JPG z pola Blob w MySQL, zapis robię w taki sposób:
begin
if ((FormatPliku = '.bmp') or (FormatPliku = '.dib')) then Dodaj_Bitmape(id)
else if formatpliku='.jpg' then Dodaj_JPG(id)
end;
zmienna FormatPliku jest typu string i jest również zapisywana w bazie danych.
teraz procedurki zapisu:
procedure Dodaj_Bitmape(id: integer);
var
fm: TMemoryStream;
BlobField: TBlobField;
begin
strumien.Clear;
pytania.Image1.Picture.Bitmap.SaveToStream(strumien);
test.ZQuery1.SQL.Text := 'SELECT * FROM pytania WHERE id = '+inttostr(id);
test.ZQuery1.Open;
try
test.ZQuery1.Edit;
BlobField := test.ZQuery1.FieldByName('grafika') AS TBlobField;
fm:=TMemoryStream.Create;
fm.LoadFromStream(strumien);
fm.Position:=0;
BlobField.LoadFromStream(fm);
test.ZQuery1.Post;
showmessage(inttostr(id))
finally
fm.Free;
test.ZQuery1.Close;
end;
end;
procedure Dodaj_JPG(id: integer);
var
fm: TMemoryStream;
BlobField: TBlobField;
begin
strumien.Clear;
pytania.Image1.Picture.Graphic.SaveToStream(strumien);
test.ZQuery1.SQL.Text := 'SELECT * FROM pytania WHERE id = '+inttostr(id);
test.ZQuery1.Open;
try
test.ZQuery1.Edit;
BlobField := test.ZQuery1.FieldByName('grafika') AS TBlobField;
fm:=TMemoryStream.Create;
fm.LoadFromStream(strumien);
fm.Position:=0;
BlobField.LoadFromStream(fm);
test.ZQuery1.Post;
showmessage(inttostr(id))
finally
fm.Free;
test.ZQuery1.Close;
end;
end;
obrazki ładnie zapisują się do bazy, natomiast problem tkwi w ich ponownym wyświetlaniu, oile bmp wyświetla się bez problemu poprzez:
test.ZQuery1.SQL.Text := 'SELECT grafika FROM pytania WHERE pytania.id='+inttostr(id);
test.ZQuery1.Open;
stream := TMemoryStream.Create;
stream.Clear;
while not test.ZQuery1.Eof do //dziala nie dla jpg
begin
stream.Position:=0;
(test.ZQuery1.FieldByName('grafika') as TBlobField).SaveToStream(stream);
i sprawdzenie jakiego typu jest plik
if((FormatPliku = '.bmp') or (FormatPliku = '.dib')) then
begin
GraphType := gtBitmap;
Stream.Read(GraphType, 1);
stream.Position:=0;
with pytania.Image1.Picture.Bitmap do
begin
pytania.Image1.Picture.Bitmap.LoadFromStream(stream);
end;
end
to już próba wyświetlenia JPG poprzez:
if ((FormatPliku = '.jpg') or (FormatPliku = '.jpeg') or (FormatPliku = '.jpe')) then
begin
GraphType := gtJpeg;
Stream.Read(GraphType, buffer);
stream.Position:=0;
with pytania.image1.Picture.Graphic do
begin
bit:=TBitmap.Create;
jpg:=TJPEGImage.Create;
stream.Position:=0;
jpg.LoadFromStream(stream);
bit.Assign(jpg);
bit.SaveToStream(stream);
stream.Position:=0;
pytania.Image1.Picture.Assign(bit);
end;
kończy się komunikatem o błędzie "jpeg error #53".
Proszę Was o pomoc jak wyświetlić te JPG?