本人不了解 OpenGL 也不会DelphiX我只求给我段代码,我要求有一函数能实现图片的缩放旋转功能
同时支持透明的遮罩颜色。要求显示速度快,比如我有个地球的图片,地球圆形的,周围四角是透明的遮罩颜色,
我要实现以圆心为中心的快速转动,同时可能有缩放的动画,遮罩颜色部分不能遮盖下面的图像。十分感谢!
email:[email protected]
同时支持透明的遮罩颜色。要求显示速度快,比如我有个地球的图片,地球圆形的,周围四角是透明的遮罩颜色,
我要实现以圆心为中心的快速转动,同时可能有缩放的动画,遮罩颜色部分不能遮盖下面的图像。十分感谢!
email:[email protected]
解决方案 »
- 做人不能太陈晓!
- 关于SQL Server数据导出到DBF数据中,忙!!!!!!!!!!!!!!!!!
- 关于在listview中根据caption(文件名)显示文件图标
- bit 字段问题,在线高分
- 加密的access数据库,ADOConnection如何访问?
- 哪一个函数可以启动控制面板,拨号网络,注册表?
- 公开用mediaplay组件播放mpg时抓图的code
- 国庆快乐.请问一下如何自绘tsplitter的分割条?不用控件.就像迅雷那样.画个渐变图.
- 一个奇怪的问题
- 报表为什么在不同机子上显示不一样?
- 哪位能给我些DELPHI7+ADO访问ACCESS的代码实例,多谢
- delphi 系统进程
你搜一下CSDN原来的贴子,我不止一次贴过旋转缩放之类的代码,至于半透明遮罩,也是有的,好像是一个可调整透明度的 tpanel 控件里有这个代码,具体链接,有空帮你找找
而且运算速度会非常的慢。因为要求速度快 应该只是设置图片显示角度而已。
不知道该如何实现。忘高手解答。谢谢。
引用 GDI+ 单元
函数说明:将一幅图片以 aAngle 的角度旋转画至画布上,x,y,w,d : 目标坐标大小
procedure DrawAngleBmp(dDC : HDC; aAngle : integer; x,Y,w,d: integer);
var GD : TGpGraphics ;
GpBmp : TGpBitmap;
aMatrix: TGpMatrix;
aCenter : tGppointF;
begin
Gd := TGpGraphics.Create(dDc);
GpBmp := tgpbitmap.Create('文件名');
aMatrix := TGpMatrix.create;
aCenter.X := Round(X + GpBmp.Width / 2);
aCenter.Y := round(Y + GpBmp.height / 2);
aMatrix.RotateAt(aAngle,aCenter);
Gd.SetTransForm(aMatrix);
Gd.DrawImage(GpBmp,GpRect(0,0,W,D),X,Y,GpBmp.Width,GpBmp.Height);
Gd.Free;
aMatrix.Free;
GpBmp.Free;
end;函数功能 :将目标图和源图以aAlpha 的透明度混合,最终输出图为原输入图
参数说明 : 1,透明度 2:你的原始图片(地球)最终输出位图
procedure DrawAphaBmp(aAlpha : byte; var dBmp : TBitmap );
var sBmp : TBitmap; //遮罩图层
PS,PD : pbytearray
i , j,K : integer;
begin
sBmp := TBitmap.Create;
with sBmp do
begin
Pixelformat := pf24bit;
Width := dBmp.Width;
Height := dBmp.Height;
Canvas.Brush.Color := $FF00FF ;
Canvas.Fillrect(Canvas.ClipRect);
end;
for i := 0 to dBmp.Height - 1 do
begin
PD := dBmp.Scanline[i];
PS := sBmp.Scanline[i];
For j := 0 to dBmp.width - 1 do
begin
K := j * 3;
PD[K] := (PD[K] * (255 - aAlpha) + PS[K] * aAlpha) shr 8;
PD[K + 1] := (PD[K + 1] * (255 - aAlpha) + PS[K + 1] * aAlpha) shr 8;
PD[K + 2] := (PD[K + 2] * (255 - aAlpha) + PS[K + 2] * aAlpha) shr 8;
end;
end;
dBmp.Assign(sBmp);
sBmp.Free;
end;
具体细节,你自己再调整一下吧
Gd.DrawImage(GpBmp,GpRect(0,0,W,D),X,Y,GpBmp.Width,GpBmp.Height);
改为
Gd.DrawImage(GpBmp,GpRect(x,y,W,D),0,0,GpBmp.Width,GpBmp.Height);
我下了一个 不过貌似很多都不一样 你的代码不能编译通过比如 GpBmp.Width,GpBmp.Height 就没有 只有 GpBmp.GetWidth GpBmp.GetHeight
谢谢了