TImagelist未添加位图



我已经筋疲力尽了。。。尝试获得自定义图片列表、TImageList和TListView以协同工作。原始问题:列表中没有显示动态添加的图片。把它缩小,问题在TImagelist中。代码如下。ilMain是TImagelist(在其他地方定义)。将位图添加到列表中,立即检索它,首先"绘制"工作正常,但seond失败。。。我在这里错过了什么?

var i:integer;
test:TSch;
currentimage :TBitmap;
stupid :TBitmap;
begin
currentImage:=TBitmap.Create;
stupid:=TBitmap.Create;
ilMain.Clear;
//  currentImage.LoadFromFile('C:DelphipiccatpicsMonaLisa.jpg');
JPeg2Bmp('C:DelphipiccatpicsMonaLisa.jpg',currentImage);
form1.canvas.Draw(100,10,currentimage);
ilMain.Add(currentimage,nil);
ilMain.GetBitmap(0,stupid);
form1.canvas.Draw(200,10,stupid);

编辑:

对此进行了进一步的测试;结果非常混乱和不一致。

结果实际上很大程度上取决于输入文件的大小(感谢那个指针,kobik!);似乎所有小于256x256的图片都没有导入到图片列表中,而X轴上的较大图片(有时??)分布在几个项目上。

ilMain设置为256x256像素。

以下是几种输入大小(X X Y,以像素为单位)的输出:950x414第一次绘制显示整个图像,第二次绘制在左上角的256x256像素。然而,TImagelist的三个项目被填充,具有3x 256x256像素:这三个图片可以从主图片中"剪切"出来,但仍然是256x256个像素。所有被切掉的小于256x256的边缘(垂直或水平)都会丢失。

1600x1600导入了六个图像;第一行完整的256x256块,可以从图片的顶部切割。tp右侧的不完整块被省略,Y大小256以下的所有行也被省略。

1500x1000与前一个类似;现在进口了五件商品。

638x376再次相似;现在只有两件"合适"。

197x256(我的原始测试文件,在上面的帖子中描述)无进口物品(X尺寸小于TImaglist X尺寸?)

256x256同样,没有数据导入

257x257仍然没有数据导入

260x260仍然没有数据导入

300x300仍然没有数据导入

512x256非常奇怪的一个。导入一张图片;但它的尺寸缩小了,所以大约70%的原始图片适合(新的)256X尺寸。图片下方添加了一个黑条,以弥补由于缩小而损失的空间。

所以这就是我现在停止测试的地方,我想知道是否有人能在这里透露一些信息。。。?

编辑:设计部分移到了新的问题(见评论kobik中的请求,谢谢伙计!)

假设JPeg2Bmp是正确的,那么您的代码就可以工作(或者至少需要工作)。我想@Dima的第二条评论是正确的。

您还没有显示ilMain属性,如果使用默认属性,则会得到一个包含Width/Height=16的图像列表。

尝试省略对form1.canvas.Draw(100,10,currentimage);的第一次调用,只绘制form1.canvas.Draw(200,10,stupid);,您应该在位置200,10处看到一个16x16图形。

TImagelist无法加载任意大小的图像
您需要预先定义它的大小,并加载具有合适大小的位图。即创建缩略图以适应图像列表尺寸。

还请注意(您可能知道)您只需要在响应WM_PAINT消息时绘制。例如在FormOnPaint事件中。

编辑:关于您的编辑,TImageList就是这样工作的。如果添加的位图大于图像列表宽度,则会尝试将位图拆分为单独的位图以适应图像列表大小。这是经过设计的。

有关hbmImage参数:,请参阅有关ImageList_Add的文档

包含图像的位图的句柄。数字从位图的宽度推断图像的宽度。

相关内容

  • 没有找到相关文章

最新更新