gpt4 book ai didi

c# - imageList.Draw 不会以不同的尺寸绘制?

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:26 25 4
gpt4 key购买 nike

ImageList 有一个名为“Draw”的方法:

imageList.Draw(graphics, bounds.X, bounds.Y, bounds.Width, bounds.Height, imgIndex);

我使用此方法在 PrintDocument 的图形对象上绘制图像。使用原始图像尺寸(16 x 16 像素)时,图像绘制正确。但是,如果我更改边界大小,则不会绘制任何内容。即使将大小更改为 32 x 32(双倍大小)也没有效果。什么都没有画。由于 dpi 不同,我需要更改绘制尺寸...我哪里错了?

编辑:解决方案似乎只是简单地使用 g.DrawImage 方法。为什么 imageList.Draw() 不绘制对我来说仍然是一个谜......

g.DrawImage(imageList.Images[imgIndex], bounds);

最佳答案

ImageList.Draw() 有点不寻常,它利用 Windows 内部的 native 图像列表代码在列表中呈现图像的内置支持。这是一种优化,它避免了将存储在 native 图像列表中的内部图像转换回托管图像对象的成本。

然而,一个副作用是此绘图的发生没有考虑应用于 Graphics 对象的任何变换。列表中的 16x16 图像将在纸上呈现为 16x16 像素。这确实有点难找回来,打印机的分辨率非常高(典型值为每英寸 600 点),图像变成小数点。

图像列表实际上是 TreeView 和 ListView 控件的图像源,它不是一个好的通用图像集合对象。像List<Image> .您的解决方法很好,Image 属性将内部位图转换回托管图像,然后 Graphics.DrawImage() 将适当缩放它以获得接近屏幕尺寸的纸上尺寸。但是,由于将图像放大 6 倍,因此会产生颗粒感。请注意,您应该 Dispose() 该对象。

关于c# - imageList.Draw 不会以不同的尺寸绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com