小编Gui*_*ill的帖子

如何绘制图像的一部分?

我有一个普通的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)

在此输入图像描述

delphi canvas bitmap delphi-xe3

4
推荐指数
1
解决办法
2066
查看次数

自定义线程行为不端

鉴于以下课程:

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)

delphi multithreading delphi-xe3

3
推荐指数
1
解决办法
183
查看次数

我怎么能淡入/淡出TImage?

我有一个简单的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)

delphi delphi-xe3

2
推荐指数
1
解决办法
3146
查看次数

如何在 TImage 图形中启用 Alpha 调平?

我有TImage一个PNGImage带有 Alpha 通道的预加载位图(按单位):

在此处输入图片说明

主题是大绿恐龙。我希望能够在运行时将其 Alpha 级别更改为范围内的任何值。像 127,他看起来像这样:

在此处输入图片说明

按照另一个类似问题的答案,我几乎觉得在皮肤上它会起作用。但这是 Alpha Level 0 的结果,例如:

在此处输入图片说明

所以,我的问题。有人可以知道如何改进答案的例行程序吗?或者知道另一种方法来实现第二张图片结果?请注意,我希望能够在运行时使用方法或您知道的任何其他方式更改此 Alpha Level 属性

先感谢您...

delphi png transparency alpha-transparency delphi-xe3

1
推荐指数
1
解决办法
4464
查看次数

我是否正确使用Bass.dll加载此音乐?

基于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文件.所以我的问题是:我做错了吗?

提前致谢.

delphi ogg bass delphi-xe3

-5
推荐指数
1
解决办法
1165
查看次数