窗口上有个IMAGE,需要在IMAGE上放上一张图片,相当于牌的反面,然后从下往上揭开,显示出牌的正面。
不知道我说清楚没有,就象桌面上有块布,布上放一张牌,是反的,慢慢揭开,出现正面图。需要实现这个过程。这个揭开过程怎么实现。这两张图片怎么渐入渐出
不知道我说清楚没有,就象桌面上有块布,布上放一张牌,是反的,慢慢揭开,出现正面图。需要实现这个过程。这个揭开过程怎么实现。这两张图片怎么渐入渐出
解决方案 »
- [求助]--------为什么这个简单多线程代码,执行后CPU好高,而且根本没有多线程的效果?
- 文本文件里面是非常整齐的,导入到COMBOBOX之后就不能对齐了!
- mysql日期问题
- 急!急!急!请各位大侠们帮帮忙吧
- ado连接sql数据库,是否可以使用缓存技术?如何使用!
- 怎样在一个窗体中打开另一个窗体,另一个窗体贴在这个窗体上,MDI除外
- 请问各位一个关于dbgrid固定列的问题
- 高手请进! 急等!
- 怎样当radiobutton 选中时 在DBgrid里面的当前行的里面添上相应的值?
- 为什么下面的ADOQuery1带参数的查询语句总查不到数据,不用参数就查得到,错在哪里?
- 再开贴求叫如何用qreport打印水印,怎么设置水印
- 我需要使用OLE调用一三维设计软件,请问如何获取类名
function IntToByte(i: Integer): Byte;
begin
if i > 255 then
Result := 255
else if i < 0 then
Result := 0
else
Result := i;
end;procedure BmpAlphaBlend(var Bmp: TBitMap; dBmp, sBmp: TBitmap; Pos: TPoint; Alpha: integer; TranColor: TColor = -1);
type
tagRGBTRIPLE = packed record
rgbtBlue: Byte;
rgbtGreen: Byte;
rgbtRed: Byte;
end;
TRGBTriple = tagRGBTRIPLE;
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..32767] of TRGBTriple;
function GetSLColor(pRGB: TRGBTriple): TColor;
begin
Result := RGB(pRGB.rgbtRed, pRGB.rgbtGreen, pRGB.rgbtBlue);
end;
var
p0, p1, p2: PRGBTripleArray;
r, g, b, p, x, y: Integer;
begin
sBmp.PixelFormat := pf24bit;
dBmp.PixelFormat := pf24bit;
if TranColor = -1 then
TranColor := sBmp.Canvas.Pixels[0, 0];
for y := 0 to sBmp.Height - 1 do
if (y + Pos.y >= 0) and (y + Pos.Y < dBmp.Height) then
begin
p0 := dBmp.ScanLine[y + Pos.y];
p1 := sBmp.ScanLine[y];
p2 := Bmp.ScanLine[y + Pos.y]; for x := 0 to sBmp.Width - 1 do
if (x + pos.X >= 0) and (x + Pos.X < dBmp.Width) then
if GetSLCOlor(p1[x]) <> TranColor then
begin
p2[x + pos.X].rgbtRed := IntToByte((p0[x + pos.X].rgbtRed * (100 - Alpha) +
p1[x].rgbtRed * Alpha) div 100); p2[x + pos.X].rgbtGreen := IntToByte((p0[x + pos.X].rgbtGreen * (100 - Alpha) +
p1[x].rgbtGreen * Alpha) div 100); p2[x + pos.X].rgbtBlue := IntToByte((p0[x + pos.X].rgbtBlue * (100 - Alpha) +
p1[x].rgbtBlue * Alpha) div 100);
end;
end;end;
procedure TForm1.Button1Click(Sender: TObject);
var
brBmp, srcBmp, temBmp: TBitmap;
i: integer;
begin
//
brBmp := TBitmap.Create;
brBmp.LoadFromFile('c:\a.bmp');
brBmp.PixelFormat := pf24bit;
temBmp := TBitmap.Create;
temBmp.Assign(brBmp); srcBmp := TBitmap.Create;
srcBmp.LoadFromFile('c:\b.bmp');
srcBmp.PixelFormat := pf24bit;
for i := 0 to 100 do
begin
BmpAlphaBlend(
temBmp,
brBmp, //背景图(大图,也是结果图)
srcBmp, //需要合成的小图
Point(0, 0), //画小图的坐标
i, //半透明度,最大100
-1 //需要透明的颜色(用于不规则图形,-1就表示以0,0位置的颜色为透明色)
); canvas.Draw(0, 0, temBmp);
end;
brBmp.Free;
temBmp.Free;
srcBmp.Free;
end;
http://www.delphiarea.com/products/