*如果使用 v6 ImageList 控件,.bmp 会丢失透明背景

2024-03-19

抱歉,我的英语不是很好。

我需要在我的 D7 应用程序中使用半透明位图图片。所以,我应该使用 XPManifest 和 ImageList version6 而不是 5.8 标准版。但在这种情况下,我遇到了一个问题:当我从流中加载图像时,所有图像都会失去透明度!

type
  TForm2 = class(TForm)
    btn4: TButton;
    btn5: TButton;
    lst1: TbtkListView;
    il1: TImageList;
    btn1: TButton;
    tlb1: TToolBar;
    btn2: TToolButton;
    btn3: TToolButton;
    xpmnfst1: TXPManifest;
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    FS: TFileStream;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btn4Click(Sender: TObject);
var
  Bmp       : TBitmap;
  ImageList: TbtkImageList;
begin
  ImageList := TbtkImageList.Create(nil);
  Bmp       := TBitmap.Create;
  FS        := TFileStream.Create('c:\temp\1.cmp',fmCreate);
  try
    Bmp.LoadFromFile('c:\temp\1.bmp');
    ImageList.Add(Bmp, nil);
    FS.WriteComponent(ImageList);
  finally
    Bmp.Free;
  end;
end;

procedure TForm2.btn5Click(Sender: TObject);
var
  Bmp       : TBitmap;
  ImageList : TbtkImageList;
begin
  ImageList := TbtkImageList.Create(nil);
  Bmp := TBitmap.Create;
  try
    FS.Position := 0;
    FS.ReadComponent(ImageList);
    ImageList.GetBitmap(0, Bmp);
    Bmp.SaveToFile('c:\temp\3.bmp');
  finally
    Bmp.Free;
    ImageList.Free;
  end;
end;

ImageListCreationCode:
constructor TbtkImageList.Create(AOwner: TComponent);
begin
  inherited;

  if HandleAllocated then
    ImageList_Destroy(Handle);
  Handle := ImageList_Create(32, 32, ILC_COLOR32, AllocBy, AllocBy);
end;

http://s020.radikal.ru/i720/1403/36/c2702a8b5c1a.png http://s020.radikal.ru/i720/1403/36/c2702a8b5c1a.png Before http://s001.radikal.ru/i195/1403/e2/1dd5ff14aa51.png http://s001.radikal.ru/i195/1403/e2/1dd5ff14aa51.png After

有人可以帮助我吗?


一旦您将具有 Alpha 通道信息的位图放入图像列表中,就没有简单的 (*) 方法可以将其以其原始位图形式取出。TImageList.GetBitmap只需设置传递给它的位图的尺寸,并且draws在它的画布上。它不使用可以透明绘制的重载,但它并不那么重要,而不是使用GetBitmap你可以打电话给Draw让自己超负荷。

因此,如果您需要保留位图的原始形式,我建议不要对图像列表进行流式输入和输出,而是对位图本身进行流式传输。


尝试下面的方法,看看它是否符合您的需求(它是透明的,但可能与再次绘制的源位图不同):

var
  Bmp       : TBitmap;
  ImageList : TImageList;
  FS: TFileStream;
begin
  ImageList := TImageList.Create(nil);
    try
      FS := TFileStream.Create('c:\temp\1.cmp',fmOpenRead or fmShareDenyWrite);
      try
        FS.ReadComponent(ImageList);
      finally
        FS.Free;
      end;
      Bmp := TBitmap.Create;
      try
        Bmp.PixelFormat := pf32bit;
        Bmp.Canvas.Brush.Color := clNone;
        Bmp.Width := ImageList.Width;
        Bmp.Height := ImageList.Height;
        ImageList.Draw(Bmp.Canvas, 0, 0, 0, dsNormal, itImage);
        Bmp.SaveToFile('c:\temp\3.bmp');
      finally
        Bmp.Free;
      end;
  finally
    ImageList.Free;
  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

*如果使用 v6 ImageList 控件,.bmp 会丢失透明背景 的相关文章

  • SATA 驱动器的硬盘 ID

    我正在为我的软件使用硬盘 ID 来检查真实用户是否正在使用该软件 对于 IDE 类型硬盘 我使用过程 GetIdeSerialNumber 获取 id 但如果是 SATA 驱动器 则 ID 为空 然后 对于 SATA 驱动器 我使用卷 ID
  • 带有子列表的通用记录 TList?

    我想在 Delphi XE5 中使用带有子列表的通用记录 TList type TMyRecord record Value1 Real SubList TList
  • 如何使用 NPAPI 将 Delphi VCL 表单嵌入到 HTML 页面中?

    使用 Delphi 编写 ActiveX 插件的方法有很多 但 ActiveX 本身在 IE 以外的浏览器中存在很多限制 所以我在想 如何编译一个 NPAPI 格式的插件 原生兼容 Chrome Firefox 该插件的目的是允许将 VCL
  • Delphi预定义环境变量

    谁能告诉我在哪里可以找到 RAD Studio 中可用的 伪 环境变量列表 例如 Platform Config 等 具体来说 我想要一个能够为我提供 RTL 版本的版本 以便我可以将编译单元 dcu 放入正确的目录中 即 XE为D15 X
  • Windows EventLog:它的操作速度有多快?

    我有一个服务应用程序 它通过 TCP 处理客户端请求并将任何事件写入 Windows EventLog 由于该应用程序预计会在短时间内为许多客户端和每个客户端的大量请求提供服务 假设每秒 1 到 50 个请求 因此我很想知道密集程度 CPU
  • 如何在Delphi 7中监听麦克风并检测声音响度

    我需要一个程序来捕获麦克风输入声音超过特定阈值时的事件 那么我可能需要不断地听麦克风 并以某种方式测量声音幅度 Delphi 7 中可以这样做吗 我建议您使用低音音频库 http www un4seen com bass html http
  • Delphi:平滑折叠/展开形式

    需要你的帮助 我一直在寻找 我在德尔福西雅图 试图平滑调整表单底部的大小 就我而言 调整大小 只是有点折叠 展开 如下所示 我怎样才能意识到这一点 我尝试过使用 TTimer procedure TForm1 Timer1Timer Sen
  • 构建多线程 TCP/IP 服务器

    我想构建一个可供最多 100 个并发客户端使用的 TCP IP 服务器 但仍不确定如何开始 至少我需要服务器 监听客户端 并将它们全部存储在数组或列表中 对于每个客户端 它需要根据其客户端状态接收和发送数据 当有人连接或断开连接时 服务器应
  • 如何隐藏 WebBrowser 直到网站完成加载/下载过程?

    我想知道我该如何隐藏WebBrowser直到网站加载过程完成 另外 我使用 Panel1 和WebBrowser在它的上面 为什么 好吧 这样 我可以完全像我想要的 WebBrowser 一样设置 Panel1 的大小和位置 然后将 Web
  • Delphi XE2 中的 TDataModule.ClassGroup 伪属性到底有什么作用?

    我尝试将一个组件从一个数据模块复制并粘贴到 Delphi XE2 中的另一个数据模块中 该组件是一个 Fast Report 数据源链接组件 数据模块是全新的 刚刚在 XE2 中创建 其他人也遇到了同样的问题并报告了质量中心为106369
  • 在 Pascal 中将文本文件中的字符串读入数组

    使用这个程序 我试图读取一个文件并将其随机打印到控制台 我想知道是否必须使用数组 例如 我可以将字符串分配到一个数组中 然后从数组中随机打印 但是 我不确定如何解决这个问题 另一个问题是 我当前的程序没有从我的文件中读取第一行 我有一个文本
  • 桌面 Delphi 应用程序是否可以通过 Windows 8 认证(使用 Windows 应用程序认证套件)?

    显然 Delphi 任何版本 不支持安全异常处理程序 https forums embarcadero com thread jspa messageID 473469 Visual Studio 中的 SAFESEH 开关 在 Windo
  • 如何将接口类型传递给过程

    如何将接口类型传递给过程参数 type Hello PortType interface ISoapInvokable 243CBD89 8766 F19D 38DF 427D7A02EAEE function GetDeneme s st
  • 在 Delphi 7 中使用 TScreen

    我的 Delphi 7 应用程序显示 Screen DesktopWidth Screen DesktopHeight Screen Monitors 0 Width Screen Monitors 0 Height 并且 如果选择了第二台
  • 如何修复 Delphi Prism ASP.NET 错误:“解析器错误消息:‘Oxygene’不是受支持的语言”

    我在 Delphi Prism 中编写了一个 ASP NET Web 应用程序 不是网站 在我的开发机器上一切正常 但是当我将其安装在测试服务器上时 出现以下错误 Server Error in MyApp Application Pars
  • 使用 GdiPlus 卸载 DLL 时程序挂起

    我有一个加载 DLL 的应用程序 它使用德尔福 GDI 库 http sourceforge net projects delphigdiplus 该应用程序在卸载 DLL 时挂起 调用免费图书馆 https msdn microsoft
  • delphi分组框标题颜色变化

    我正在使用 BDS 2006 想知道您是否可以使用项目中存在的 XPmanifest 更改组框和单选按钮组标题的颜色 因为它始终是蓝色 唯一的方法是重写 Paint 方法TGroupBox http docwiki embarcadero
  • 如何在 TList 中存储动态数组?

    我需要存储未知数量的组 每个组都有未知数量的元素 项目 这是我的 小组 TGroup array of Integer lt dynamic array as you can see 我想使用 TList 来保存我的组 我的想法是 我可能想
  • FreeMM 与 ShareMem

    我们有很多用 delphi 和 c builder 编写的 dll 库 并使用 sharemem 和 borlndmm dll 3d party 库中的对齐问题迫使我们转向 delphi 2007 中的新内存管理器 有人可以帮我解释一下 共
  • EIdOSSLUnderlyingCryptoError 和“使用 SSL 连接时出错。错误:14094410...”

    我在 OS X 上的 Delphi 10 1 Berlin 中遇到 Indy 组件问题 我正在使用TIdHTTP使用 HTTPS 连接到 Web 服务 问题是从 OS X 客户端连接到服务器 在 OS X 上运行时 我总是遇到同样的错误 P

随机推荐

  • 在 Z3 中证明归纳事实

    我试图在 Microsoft 的 SMT 求解器 Z3 中证明一个归纳事实 我知道 Z3 一般不提供此功能 如Z3 guide http rise4fun com z3 tutorial guide 第 8 节 数据类型 但是当我们限制要证
  • 未捕获的语法错误:意外的标记:

    我正在 MooTools 脚本中运行 AJAX 调用 这在 Firefox 中工作正常 但在 Chrome 中我得到了Uncaught SyntaxError Unexpected token 错误 我无法确定原因 注释掉代码以确定错误代码
  • 传递多个参数来应用 (Python)

    我正在尝试清理 Python 中的一些代码以向量化一组功能 我想知道是否有一种好方法使用 apply 来传递多个参数 考虑以下内容 当前版本 def function 1 x if string in x return 1 else ret
  • Firebase事务api调用当前数据为空

    当我使用transaction 更新一个位置 该位置的数据是返回空值即使该位置有一些数据 I tried transaction 读取数据后在同一位置 它提供该位置的所有数据 我该如何使用transaction 如果情况像上面那样呢 事务以
  • PHP set_time_limit 抛出 500 错误?

    当我使用set time limit如果脚本运行时间超过 360 秒 则会抛出 500 错误 359 没什么 360及以上 错误 我无法访问 php ini 如何修复此错误 脚本运行时间超过 360 秒 就会抛出 500 错误 听起来你在某
  • Kafka消费者启动延迟汇合dotnet

    当启动 confluence dotnet Consumer 时 在调用订阅和后续轮询之后 似乎需要很长时间才能从服务器接收 分区已分配 事件 因此也需要很长时间 大约 10 15 秒 起初我以为存在自动创建主题的开销 但无论消费者的主题
  • 我应该如何设置集成测试以将测试数据库与实体框架结合使用?

    我正在为应用程序编写集成测试 但无法找到有关如何为我的集成套件设置测试数据库的任何最佳实践 我正在使用实体框架代码优先开发 ASP NET MVC4 应用程序 我可以确认我的测试项目中的测试默认与我的计算机上的本地开发数据库进行通信 这并不
  • Fortran 小数和千位分隔符

    有没有办法更改逗号的句点小数分隔符 另外 如何使输出数字具有千位分隔符 这可以是逗号 句号 空格 打开文件时使用参数 DECIMAL COMMA open 100 file logfile status unknown DECIMAL CO
  • 在此上下文中未定义“this”

    我该如何解决以下情况 interface I class A i I class C I A this lt lt this is not defined in this context 简而言之 我想将类实例传递给超类构造函数 在科特林中
  • iOS/iPhone 可达性 - 如何使用 Reachability.m/.h 仅检查互联网丢失/无法可达的情况

    目前我正在使用苹果的reachability m h 的类并且它可以工作 除了它会通知我任何更改 因为我只想在网络无法访问时通知用户 目前 如果我有互联网连接 然后松开网络 它会告诉我 但是 当您重新连接到网络时 它也会告诉我 这是我不想要
  • 如何将LiveData保存到saveStateHandle中?

    如图所示https stackoverflow com a 61166665 3286489 https stackoverflow com a 61166665 3286489 我们可以将LiveData保存在savedStateHand
  • 具有模型属性的 Django 管理 search_fields

    我正在尝试使用模型中的属性作为 django admin 1 2 中的字段 这是我的代码的示例 class Case models Model reference models CharField u Reference max lengt
  • GIT 重命名分支并保留所有提交历史记录

    我有一个关于重命名 git 分支的问题 我创建了一个本地分支dev并将分支推送到远程 我做了很多工作dev分支并定期更新远程分支 现在我想更改分支的名称dev to development 我知道如何重命名 GIT 中的分支 我的问题是 如
  • flex 中 yywrap() 的含义

    该指令在 flex lex 中意味着什么 define yywrap 1 和这个 t 我在下面的代码中找到它 t putchar t 输入 你好世界 输出 你好世界 根据Lex 和 Yacc 页面 http dinosaur compile
  • 如何更改字符串日期的日期格式

    我有像这样的字符串形式的日期 String date 11 12 2018 我想把它改成 2018 12 11 具有相同的变量 因此 我尝试了下面的代码 但它没有给出我期望的输出 String date 11 12 2018 SimpleD
  • 在 C 中,作为参数传递时,“&function”和“function”之间有什么区别?

    例如 include
  • File.Open的默认目录是什么?

    我有这个代码 Stream f File Open data majid FileMode OpenOrCreate FileAccess ReadWrite 文件将在哪里创建 From the File OpenMSDN 文档 http
  • 在哪里可以下载旧版本的 Dart SDK

    我需要获取旧版本的 Dart SDK 来解决问题 具体来说是 Dart SDK 1 5 1 但 dartlang 当前的稳定版本是 1 6 0 是否有一个 URL 可以让我获取所有过去的 Linux 或 MacO 版本的 SDK Updat
  • 这些是 nativecrypto 错误消息吗?

    当我的 Android 手机和服务器之间建立 TLS 连接时 我得到以下信息nativecrypto error messages in logcat 06 30 21 55 06 565 E NativeCrypto 24826 ssl
  • *如果使用 v6 ImageList 控件,.bmp 会丢失透明背景

    抱歉 我的英语不是很好 我需要在我的 D7 应用程序中使用半透明位图图片 所以 我应该使用 XPManifest 和 ImageList version6 而不是 5 8 标准版 但在这种情况下 我遇到了一个问题 当我从流中加载图像时 所有