Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Как записать картинки типа 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.089 c
1-1084813088
Sour
2004-05-17 20:58
2004.05.30
JvInspecor из JCVL


11-1073649843
Sane
2004-01-09 15:04
2004.05.30
Таймер в кол... помогите..)


3-1083942381
VflowerW
2004-05-07 19:06
2004.05.30
Как в Delphi присвоить переменной значение выполненного запроса Q


14-1084263033
PVOzerski
2004-05-11 12:10
2004.05.30
Нужна ли наука России? И нужна ли русской науке РАН?


6-1081438765
-=Demon=-
2004-04-08 19:39
2004.05.30
Структура IP,TCP и ICMP