我有一个普通的Bitmap加载了PNGImage.以下代码显示整个图像; 但我要找的是像下面的示例一样显示.我基本上想要减少它将被绘制的虚拟"位置".请注意,我不能仅仅因为有人问我可以枚举的原因来调整PaintBox的大小.我想我必须使用Rects和/或一些复制功能,但我自己也搞不清楚.有谁知道怎么办?
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Canvas.Brush.Color := clBlack;
PaintBox1.Brush.Style := bsSolid;
PaintBox1.Canvas.FillRect(GameWindow.Screen.ClientRect);
PaintBox1.Canvas.Draw(0, 0, FBitmap, FOpacity);
end;
Run Code Online (Sandbox Code Playgroud)

鉴于以下课程:
type
GEvent = class(TThread)
public
procedure Terminate;
procedure Call(Event : GEvent);
constructor Create;
procedure Execute; Override;
end;
TDirection = (DUp, DRight, DDown, DLeft);
EventTitle = class(GEvent)
private
Index : Integer;
Sprite : CSprite;
Terminate : Boolean;
procedure CreateSprite;
procedure MoveCursor(Direction : TDirection);
procedure RefreshCursor;
constructor Create;
destructor Destroy;
public
procedure Execute;
end;
implementation
{ GEvent }
procedure GEvent.Call(Event: GEvent);
begin
Suspend;
// inherited Terminate;
Self := GEvent(Event.ClassType.Create);
end;
constructor GEvent.Create;
begin
inherited Create(True);
end;
destructor GEvent.Destroy;
begin
Terminate;
inherited; …Run Code Online (Sandbox Code Playgroud) 我有一个简单的TForm名为Form1; Image1是一个TImage加载PNGImage和Button1 TButton来测试的东西.它成功地实现了AlphaBlend Image1图片的方法.代码如下:
procedure SetPNGOpacity(Image : TImage; Alpha: Byte);
var
Bmp: TBitmap;
BlendFn: TBlendFunction;
PNG: TPNGImage;
begin
Png := TPngImage.Create;
Png.Assign(TPNGImage(Image.Picture.Graphic));
Bmp := TBitmap.Create;
Bmp.Assign(Png);
Image.Picture.Bitmap.PixelFormat := pf32bit;
Image.Picture.Bitmap.AlphaFormat := afPremultiplied;
Image.Picture.Bitmap.Canvas.Brush.Color := clBlack;
Image.Picture.Bitmap.SetSize(Png.Width, Png.Height);
BlendFn.BlendOp := AC_SRC_OVER;
BlendFn.BlendFlags := 0;
BlendFn.SourceConstantAlpha := Alpha;
BlendFn.AlphaFormat := AC_SRC_ALPHA;
winapi.windows.AlphaBlend(
Image.Picture.Bitmap.Canvas.Handle,
0, 0, Image.Picture.Bitmap.Width,
Image.Picture.Bitmap.Height,
Bmp.Canvas.Handle,
0, 0, Bmp.Width,
Bmp.Height,
BlendFn
);
Bmp.FreeImage;
Bmp.Free;
Png.Free;
end;
Run Code Online (Sandbox Code Playgroud)
如果我简单地在Button1上调用它,onClick则图像被混合.无论如何,我的目标是淡入/淡出Image1; 换句话说,转到Opacity 0到255并反向.我能看到的是SetPNGOpacity那里停止在循环中工作.我自然尝试使用以下代码设置应用程序繁忙:
procedure TForm1.Button1Click(Sender: …Run Code Online (Sandbox Code Playgroud) 我有TImage一个PNGImage带有 Alpha 通道的预加载位图(按单位):
主题是大绿恐龙。我希望能够在运行时将其 Alpha 级别更改为范围内的任何值。像 127,他看起来像这样:
按照另一个类似问题的答案,我几乎觉得在皮肤上它会起作用。但这是 Alpha Level 0 的结果,例如:

所以,我的问题。有人可以知道如何改进答案的例行程序吗?或者知道另一种方法来实现第二张图片结果?请注意,我希望能够在运行时使用方法或您知道的任何其他方式更改此 Alpha Level 属性
先感谢您...
基于Bass的文档,我正在尝试使用以下代码加载ogg文件:
var
FFile : string;
Music: HSAMPLE;
ch: HCHANNEL;
OpenDialog1 : TOpenDialog;
begin
Dynamic_Bass.Load_BASSDLL('Library/Bass.dll');
Dynamic_Bass.BASS_Init(1,44000,Bass_DEVICE_SPEAKERS,0,nil);
OpenDialog1 := TOpenDialog.Create(nil);
if not OpenDialog1.Execute then
Exit;
ffile := OpenDialog1.FileName;
Music := BASS_SampleLoad(FALSE, PChar(ffile), 0, 0, 3, BASS_SAMPLE_OVER_POS);
ch := BASS_SampleGetChannel(Music, False);
BASS_ChannelSetAttribute(ch, BASS_ATTRIB_PAN, 0);
BASS_ChannelSetAttribute(ch, BASS_ATTRIB_VOL, 1);
BASS_ChannelPlay(ch, False);
ShowMessage(IntToStr(BASS_ErrorGetCode));
end;
Run Code Online (Sandbox Code Playgroud)
ShowMessage返回5.根据文档,这是Handle错误,这意味着错误在musicvar中.如果我评论下面的行BASS_SampleLoad我得到错误2.意味着无法加载该文件.所以这是一个普通的OGG文件.所以我的问题是:我做错了吗?
提前致谢.