TImage 对象

属性/方法 说明
Stretch 是否根据图象自动缩放大小
Picture TPicture 对象
   

TPicture 对象

属性/方法 说明
Bitmap TBitmap 对象
Assign(...) 从其它对象复制图象,有:
TBitmap 等
Graphic TGraphic 对象

TBitmap 对象

属性/方法 说明
Assign(...) 从其它对象复制 BMP 图图象,有:
TBitmap、TJpegImage
LoadFromStream(TStream) 从流中加载 BMP 图象
Width 宽度
Height 高度
Canvas 画布对象,进行绘图操作

TGraphic 对象

代表一个图像,存储了图像的源码。

属性/方法 说明
LoadFromClipboardFormat 从剪贴板载入图像
LoadFromFile 从文件中载入图像
LoadFromStream 从流中载入图像
SaveToClipboardFormat 复制到剪贴板
SaveToFile 图像保存到文件
SaveToStream 图像保存到流

LoadFromClipboardFormat

LoadFromClipboardFormat(AFormat: Word; AData: THandle; APalette: HPALETTE)
参数 说明
AFormat  
AData  
APalette  

TJpegImage 对象

属性/方法 说明
LoadFromStream(TStream) 从流中加载 JPEG 图象
PixelFormat 设置色深,可用 jf24Bit jf8Bit
CompressionQuality 设置图像存储的质量,1-100
Grayscale 是否灰度,消除颜色
在 Assign 前、LoadFrom... 后设置
Palette 调色板,TPalette 对象
Performance 优化选择,可用 jpBestQuality 和 jpBestSpeed

TGifImage 对象

属性/方法 说明
OptimizeColorMap() 优化颜色表(缩小存储尺寸)

示例1:显示从数据库取出的 JPEG 图象。

var
   ok : boolean;
begin
   adoconnection1.ConnectionString := 'driver={sql server};...';
   adoquery1.SQL.Text := 'select top 1 pic from images';
   adoquery1.Open;

   with adoquery1 do
      ok := ViewPicture(image1,CreateBlobStream(FieldByName('pic'),bmRead),'JPG');

   if not ok then
      showmessage('显示图象失败!')
   else
      if image1.Stretch then
      begin
         image1.Width := image1.Picture.Width;
         image1.Height:= image1.Picture.Height;
      end;

   adoquery1.Close;
   adoconnection1.Close;
end;
// 显示图象函数
// 返回值表示图象显示是否成功
// 显示图象函数,pictype 可为:'BMP' 'JPG' 'JPEG'
function ViewPicture(img:TImage; query:TADOQuery; fieldname:String; pictype:String):boolean;
var
    jpg : TJpegImage;
    ts  : TStream;
    gif : TGifImage;
begin
    result := false;

    pictype := LowerCase(pictype);
    try
        ts := query.CreateBlobStream(query.FieldByName(fieldname),bmRead);
        if ts.Size=0 then exit;

        if (pictype='bmp') or (pictype='image/bmp')  then
        begin
            try
                img.Picture.Bitmap.LoadFromStream(ts);
                result := true;
            except
            end;
        end;

        if (pictype='jpg') or (pictype='image/pjpeg') then
        begin
            jpg := TJpegImage.Create;
            try
                jpg.LoadFromStream(ts);
                img.Picture.Bitmap.Assign(jpg);
                result:=true;
            finally
                jpg.Free;
            end;
        end;

        if (pictype='gif') or (pictype='image/gif') then
        begin
            gif := TGifImage.Create;
            try
                gif.LoadFromStream(ts);
                img.Picture.Bitmap.Assign(gif);
                result:=true;
            finally
                gif.Free;
            end;
        end;

        ts.Free;

    except end;
end;

示例2:代码生成图象、并保存为 BMP、JPG、GIF 格式。

var
    bmp : TBitMap;
    jpg : TJpegImage;
    gif : TGifImage; // 非标准件
begin
    bmp:=TBitmap.Create;
    bmp.Canvas.Brush.Color:=clRed;  // 背景色:红
    bmp.Width:=100;                 // 宽度
    bmp.Height:=100;                // 高度
    bmp.Canvas.TextOut(0,0,'1234'); // 输出文字
    bmp.SaveToFile('c:\1.bmp');     // 保存为 BMP

    jpg:=TJPEGimage.Create;
    jpg.Assign(bmp);                // 导入图像
    jpg.CompressionQuality:=100;    // 图像质量
    jpg.Performance:=jpBestQuality; // 优化:质量
    jpg.SaveToFile('c:\1.jpg');     // 保存为 JPEG(质量较差,原因待查)

    gif := tgifimage.create;
    gif.Assign(bmp);                // 导入图像
    gif.OptimizeColorMap;           // 优化
    gif.SaveToFile('c:\1.gif');     // 保存为 GIF
    gif.Free;

    image1.Picture.Bitmap.Assign(jpg); // 显示图像

    bmp.Free;
    jpg.Free;
    gif.Free;

end;

示例3:图像数据互传。

// JPEG 图像,Stream 载体

ms := TMemoryStream.Create;
image1.Picture.Graphic.SaveToStream(ms);
ms.Position := 0;
jpg := TJPEGImage.Create;
jpg.LoadFromStream(ms);
image2.Picture.Bitmap.Assign(jpg);
ms.Free;
jpg.Free;

// BMP 图像,Stream 载体

ms := TMemoryStream.Create;
image1.Picture.Graphic.SaveToStream(ms);
ms.Position := 0;
image2.Picture.Bitmap.LoadFromStream(ms);
ms.Free;

// 直接互传

image2.Picture.Assign( image1.Picture );