SQL Server 2005裏的Image處理

 

SQL Server 2005裏的Image字段裝的就是文本類型數據; 

 

 

delphi上傳圖片--個人照片

 

1. 使用到的控件:

    (1) Image 控件(TImage類的);

    (2) OpenPictureDialog控件(打開圖片的控件);

 

2. 使用到一個類:TMemoryStream

 

3. 數據庫的字段:Blob字段;存放圖像的二進制;

 

 

功能一: 清除照片

 

步驟:

 Image1.Picture.Graphic := nil ;
    Image1.Tag := 1 ;

使用如下語句即可;

 

 

 

功能二: 添加照片

 

步驟:

1. 打開硬盤,選擇照片時,用以下過程:


procedure TRYGLEditForm.image1DblClick(Sender: TObject);
var
  filestream:TFileStream;
begin
  inherited;
  if not (dsMaster.State in [dsEdit , dsInsert]) then
     exit ;

    if dlgOpenPic1.Execute then
    begin
      try
        filestream := TFileStream.Create(dlgOpenPic1.FileName,fmOpenRead);
        if filestream.Size > 20000 then
        begin
          MsgDialog.ShowError('圖片太大影響速度,不能超過20K大小');
          abort;
        end;
      finally
        filestream.free;
      end;
      Image1.Picture.LoadFromFile(dlgOpenPic1.FileName);
      Image1.Tag := 1 ;
    end;
end;

 

 

2. 保存到數據庫時:

 


 {--cyj 保存圖片--}
procedure TRYGLEditForm.SavePicture;
 var
  PicName , ext  : string ;
  strm : TMemoryStream;
begin
     try
       if Image1.Picture.Graphic = nil then exit;


        strm := TMemoryStream.Create ;
        Image1.Picture.Graphic.SaveToStream(Strm);
        strm.Position := 0 ;

        if strm.Size = 0 then
           cdsPHOTO.FieldByName('photo').Clear
        else
        begin
           With cdsPHOTO do
           begin
             if recordcount > 0 then
               Edit
             else
               Append;
             TBlobField(FieldByName('PHOTO')).LoadFromStream(strm);
             Post;
             ApplyUpdates;
           end;
        end;
    finally
        strm.Free ;
    end;
end ;

 

 

 

//--讀取圖片到Image控件, 在formshow事件裏調用ShowPhoto()即可


{--顯示個人照片 支持bmp jpg格式--}                  
procedure TFmEmployeeInput.ShowPhoto();
var
  //strm: TADOBlobStream;
  strm: TClientBlobStream; //--因爲用的是ClientDataSet組件作爲數據讀取控件    
  JpegImage: TJpegImage;
  Bitmap: TBitmap;
  PType: Integer;
begin
  PType := 0;

  if FMEmployee.CDS1.FieldByName('photo').AsString = '' then
  begin
     Exit;
  end;


  strm := TClientBlobStream.Create(tblobfield(FMEmployee.CDS1.FieldByName('photo')),bmread);
  try //try1
    strm.position :=0;
    image1.Picture.Graphic := nil; //清除圖像
    // BMP、JPEG兩種圖像數據必需分別處理
   if PType = 1   then //BMP型圖像數據
   begin //begin11
     bitmap := tbitmap.Create ;
   try //try11
     bitmap.LoadFromStream(strm);
     image1.Picture.Graphic := bitmap;
   finally
     bitmap.Free;
   end; //end try11
  end //end begin11
  else
   if PType = 0 then //JPEG型圖像數據
   begin //begin12
     jpegimage := tjpegimage.Create ;
  try //try12
    jpegimage.LoadFromStream(strm);
    image1.Picture.Graphic := jpegimage;
  finally
    jpegimage.Free ;
  end; //end try12
  end; //end begin12
  finally
    strm.Free ;
  end; //end try1
end;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章