GDI+从流中加载图片(转自万一的blog)

 

uses GDIPOBJ, GDIPAPI;

procedure TForm1.FormPaint(Sender: TObject);
const
ImgPath = 'c:/temp/test.bmp';
var
img: TGPImage;
bit: TBitmap;
g: TGPGraphics;
begin
bit := TBitmap.Create;
bit.LoadFromFile(ImgPath); {因为 TBitmap 操作流特别方便, 这里就没有演示}

img := TGPBitmap.Create(bit.Handle, bit.Palette);

g := TGPGraphics.Create(Canvas.Handle);
g.DrawImage(img, 0, 0);

g.Free;
bit.Free;
img.Free;
end;

方法二:



TGPImage 需要的是 IStream 而非 TStream, 直接给它一个 IStream 参数不就完了?

那怎么实现 IStream 接口呢? Classes 单元下有一个 TStreamAdapter 类就是专门实现 IStream 接口的.

uses GDIPOBJ, GDIPAPI;

procedure TForm1.FormPaint(Sender: TObject);
const
ImgPath = 'c:/temp/test.bmp';
var
img: TGPImage;
MemStream: TMemoryStream;
MyIStream: TStreamAdapter;
g: TGPGraphics;
begin
MemStream := TMemoryStream.Create;
MemStream.LoadFromFile(ImgPath);
MyIStream := TStreamAdapter.Create(MemStream);
img := TGPImage.Create(MyIStream);

g := TGPGraphics.Create(Canvas.Handle);
g.DrawImage(img, 0, 0);

g.Free;
img.Free;
MemStream.Free;
MyIStream := nil; {注意这里}
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值