XE5 ImageList的BUG?

今天做界面, 在imagelist里加载一个带有半透明通道的PNG图, 结果发现图片居然发暗, 如下:

原图: IDE里加载以后的图:

明显变暗...查询了源码, 无果

然后又用2010去测试, 发现没问题...可惜2010版本看不到ImageListEditer的源码, 所以无从比较

随后我又用代码去动态加载图片, 发现仍然会有图片变暗的问题:

var
  nWIC: TWICImage;
  nBmp: TBitmap;
begin
  nWIC := TWICImage.Create;
  nWIC.LoadFromFile(‘d:\542725.png‘);

  nBmp := TBitmap.Create;
  nBmp.Assign(nWIC);

  ImageList1.Add(nBmp, nil);
  nBmp.Free;
  nWIC.Free;
end;

继续查找源码, 经过1个多小时的各种郁闷, 终于发现了一个以前被忽略过的属性: nBmp.AlphaFormat

从帮助上看到其描述:

Vcl.Graphics.TAlphaFormat

From RAD Studio API Documentation

  • Up to Parent: Vcl.Graphics

Delphi

TAlphaFormat = (afIgnored, afDefined, afPremultiplied);

C++

enum DECLSPEC_DENUM TAlphaFormat : unsigned char { afIgnored, afDefined, afPremultiplied };

Properties

Type Visibility Source Unit Parent
enum public
Vcl.Graphics.pas

Vcl.Graphics.hpp

Vcl.Graphics Vcl.Graphics

Description

TAlphaFormat indicates how the reserved byte of each pixel is used in a 32 bit bitmap.

TAlphaFormat has the following values:

Value Meaning

afIgnored


The Reserved byte in the TRGBQuad is ignored.


afDefined


The reserved byte in the TRGBQuad contains an alpha value.


afPremultiplied


The reserved byte in the TRGBQuad contains an alpha value. The red, green, and blue values have been premultiplied with the alpha value.

似乎应该使用afDefined值, 可以让BMP理解透明通道的值, 可是写了测试代码, 却无效果

试试其他的值, 发现使用afIgnored的时候是正常的...-_- 不知道为啥

var
  nWIC: TWICImage;
  nBmp: TBitmap;
begin
  nWIC := TWICImage.Create;
  nWIC.LoadFromFile(‘d:\542725.png‘);

  nBmp := TBitmap.Create;
  nBmp.Assign(nwic);
  nBmp.AlphaFormat := afIgnored;

  ImageList1.Add(nbmp, nil);
  nBmp.Free;
  nWIC.Free;
end;

可惜在IDE界面里, 直接使用编辑器向ImageList添加图像仍然是灰色的, 无解....只好通过代码从资源文件中加载了.....先这么办吧

时间: 2024-10-10 10:18:11

XE5 ImageList的BUG?的相关文章

jessie 安装glance 使用api v2 bug

jessie安装glance,为instance创建快照,glance --os-image-api-version 2 image-list,报错 glance --os-image-api-version 2 image-list None is not of type u'string' Failed validating u'type' in schema[u'properties'][u'ramdisk_id']:     {u'description': u'ID of image 

解决EnableVisualStyles Bug

一位朋友碰到了一个WinForm的问题,在网上搜了一通,没找到能解决问题的方案, 正好我以前以碰到过,在这里把解决方案呈上,以便有遇到此问题的朋友能有帮助. 问题是这样的,当启用了虚拟样式后,设置好的TeeView 的图标就不见了,代码如下: Application.EnableVisualStyles(); 在Debug模式生成的程序没问题,但用Release模式生成则不见了. 在以下地址有一个方法,但不一定能解决问题, http://www.codeproject.com/KB/bugs/E

解决myeclipse中struts2 bug问题包的替换问题

因为struts2的bug问题,手工替换还是比较麻烦,但即便是最新的myeclipse2014也没有替换最新的struts2包,研究了一天,终于找到了解决办法.以下就解决方法与大家分享一下. 1.在perferences中找到 Myeclipse->Project Libraries,右边找到 struts2.1 Libraries,点击 Enable advanced configiguration,去掉以下文件前面的对勾,然后点击 Add custom Jars 2.在弹出的对话框中选择 A

关于工作中微信分享接口的bug

调用config 接口1的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息.以下为常见错误及解决方法: invalid url domain当前页面所在域名与使用的corpid没有绑定(可在该企业号的应用可信域名中配置域名). invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认c

android 2.x上Dialog特定情况导致无法dismiss的bug

近期在做一个简单的对话框框架,作用不过做出一个显示效果在android 2.x到android 4.x上均类似的对话框. 思路比較简单,就是使用装饰模式包裹Dialog,暴露的接口调用时会自己主动完毕一些设置 可是遇到一个特别诡异的问题,在android 2.x上的Dialog对话框无法被dismiss,仅仅要弹出来界面就卡死,强行使用eclipse又一次run的话会导致android设备黑屏无响应,假设是模拟器,则直接崩溃,看到启动画面.并且这个还不是ANR错误. 后来通过删减代码找到了问题的

ThinkPHP3.2.3 foreach嵌套循环bug

有两个数组authA和authB authA如下 1 Array 2 ( 3 [0] => Array 4 ( 5 [auth_id] => 1 6 [auth_name] => 文章管理 7 [auth_pid] => 0 8 [auth_c] => 9 [auth_a] => 10 [auth_level] => 0 11 ) 12 13 [1] => Array 14 ( 15 [auth_id] => 4 16 [auth_name] =>

XE5安卓手机要求

1 ARMv7 的 CPU v6 的肯定不支持.2 黑屏是因为你的手机 CPU 不支持 NEON 特性.或者是 T2 CPU.3 系统版本  2.3.3 到 2.3.9 或者 4.0 以上.4. SDK 请使用 4.0 以上的.最好不要自己配置,使用  XE5 自带的配置. AndroidSDK22.0.1_32bit5. 如果是 海思等特殊的 CPU,请使用 XE5最新版本,肯定能运行.6. 无论什么手机,都会有 不兼容的 地方.三星的也不例外.特别是 拍照 和 定位. 如果卖家不知道 CPU

BUG YII2.0 cURL error 6: Could not resolve host:

BUG描述:登录直接显示 原因:服务器设置端口权限,或者DNS毛病 解决方案:只能去服务器端设置,配置端口 DNS: 修改dns 114.114.114.114 或者 8.8.8.8

SPARK大数据计算BUG处理:

大数据计算BUG处理: 程序修改前资源情况: Driver : 1台 Worker : 2台 程序提交申请内存资源 : 1G内存 内存分配情况 : 1. 20%用于程序运行 2. 20%用于Shuffle 3. 60%用于RDD缓存 单条TweetBean大小 : 3k 1. 内存溢出 原因:因为程序会把所有的TweetBean查询出来并且合并(union),该操作在内存中进行.则某个campaign数据量较大时,如500W数据,则500W*10k=50G,超出内存限制. 解决方法: 先按数据量