Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизКак записать картинки типа jpg и gif в базу Найти похожие ветки
← →
чайник1 (2004-05-12 07:23) [0]Уважаемые мастера, почему при записи в тип поля Image на MSSQL записываются только картинки типа bmp, как записать другой тип jpg, gif? спасибо. Текст такой:
procedure TForm1.Button4Click(Sender: TObject);
begin
form1.rr.Open;
form1.rr.Active:=true;
form1.rr.Append;
form1.rr.FieldByName("den").asinteger:=kk;
form1.rr.FieldByName("text_p").Assign(form1.im1.picture);
form1.rr.Post;
form1.rr.Refresh;
kk:=kk+1;
end;
← →
Мунька © (2004-05-12 18:26) [1]А вы уверены, что Вам надо записать именно картинки? Можно хранить ссылки на них, а сами картинки держать в каталоге
← →
Shkut © (2004-05-12 18:59) [2]Если внмательно полазить по исходникам компонентов, то увидите, что в объекте TGraphics не реализована поддержка чего-то типа TJpeg или TGif, а TBitmap там есть.
Расширьте свой компонент, чтобы он раскодировал эти форматы, и Assign их с полем базы. Полю все равно, что хранить, ошибка на стадии работы в Delphi.
← →
Мунька © (2004-05-12 19:10) [3]TGif не реализован, jpg реализован
← →
Romkin © (2004-05-12 19:25) [4]jpg - в отдельном модуле, который добавляет своего потомка от TGraphic. Можно и такую же реализацию gif найти ;)
А качать - через поток, распознавая, что за формат и создавая нужного потомка вручную.function GetStreamImgType(Stream: TStream): TClass;
var
StreamPos: int64;
ImgSign: string;
begin
StreamPos := Stream.Position;
try
//BMP если не определено
Result := Graphics.TBitmap;
//JPEG
SetLength(ImgSign, 4);
Stream.Seek(6, soFromCurrent);
Stream.Read(ImgSign[1],4);
if (UpperCase(ImgSign) = "JFIF") or (UpperCase(ImgSign) = "EXIF") then
Result := Jpeg.TJPEGImage;
//WMF
Stream.Position := StreamPos;
SetLength(ImgSign, 4);
Stream.Read(ImgSign[1],4);
if ImgSign = #$D7#$CD#$C6#$9A then
Result := Graphics.TMetafile;
finally
Stream.Position := StreamPos;
end;
end;
procedure LoadProperImage(Stream: TStream; Picture: TPicture);
var
Img: TGraphic;
StreamPos: int64;
begin
StreamPos := Stream.Position;
Img := TGraphicClass(GetStreamImgType(Stream)).Create;
try
Stream.Position := StreamPos;
Img.LoadFromStream(Stream);
Picture.Graphic := Img;
finally
Img.Free;
end;
end;
function LoadPictureFromBLOB(Picture: TPicture; Field: TBlobField): boolean;
var
Stream: TStream;
begin
Result := False;
if not Field.isNULL then
begin
Stream := TMemoryStream.Create;
try
Field.SaveToStream(Stream);
Stream.Position := 0;
LoadProperImage(Stream, Picture);
Result := True;
finally
Stream.Free;
end;
end;
end;
procedure SavePictureToBlob(Picture: TPicture; Field: TBlobField);
var
Stream: TStream;
begin
if not (Field.DataSet.State in [dsEdit, dsInsert]) then
Field.DataSet.Edit;
Field.Clear;
if Assigned(Picture.Graphic) then
if not Picture.Graphic.Empty then
begin
Stream := TMemoryStream.Create;
try
Picture.Graphic.SaveToStream(Stream);
Stream.Position := 0;
Field.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.03 c