将图像大小调整为缩略图大小的问题

时间:2009-12-02 07:10:45

标签: .net system.drawing

我有一个图像,我将图像调整为缩略图大小  如果我使用图像大小[700(宽度)* 600(高度)]原始大小,它工作正常  假设我有10张大小的图像

但如果我使用大小为[1100 * 1200]原始尺寸的图像  它将图像调整为缩略图,但与其他图像的大小不匹配

在listview控件中显示时   所有尺寸均为[700 * 600]的图像均以单一尺寸显示

尺寸为[1100 * 1200]的图像以一种尺寸显示[略小于其他图像]

所以当我在显示图像时  listview控件所以这看起来 所有10张图片均以一种尺寸显示 但是一个图像以较小的形式显示 大小

,有时候所有图片都可以正常加载

但有些图像只显示少量图像10张图像2张图像未显示

System.Drawing.Image objImage = System.Drawing.Bitmap.FromFile(System.Web.HttpContext.Current.Server.MapPath(@"Images\" + sImageFileName));
if (sImageFileName != null)
{
    if (iThumbSize == 1)
    {

        dHeight = objImage.Height;
        dWidth = objImage.Width;
        dNewHeight = 100;
        dNewWidth = 100;
        objImage = objImage.GetThumbnailImage((int)dNewWidth, (int)dNewHeight, new System.Drawing.Image.GetThumbnailImageAbort(callback), new IntPtr());
}

这是我正在使用的代码  我将尺寸高度和宽度设置为100

任何帮助都会很棒  谢谢

2 个答案:

答案 0 :(得分:1)

我没有看到您的代码有什么问题,但是,我建议使用Graphics对象来绘制图像而不是使用Image对象。
这是一个例子:

Bitmap newImage = new Bitmap(newWidth, newHeight); using (Graphics gr = Graphics.FromImage(newImage)) {
    gr.SmoothingMode = SmoothingMode.AntiAlias;
    gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
    gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
    gr.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight)); }

答案 1 :(得分:0)

ListView控件(以及ImageList)设计用于处理统一大小的图像。这可能很奇怪,但情况就是这样。所以我让ListView按照自己的意愿工作。我从普通缩略图的所有图像中创建了SquareThumbnail:

private void Thumbnail_Square()
{
    Size size = new Size(Settings.Thumbnail.Size, Settings.Thumbnail.Size);
    this._squareThumbnail = new Bitmap(size.Width, size.Height, this._thumbnail.PixelFormat);
    Graphics g = Graphics.FromImage(this._squareThumbnail);
    g.FillRectangle(Brushes.Purple, 0, 0, size.Width, size.Height);
    size = this._thumbnail.Size;
    Point location = new Point(
        (Settings.Thumbnail.Size - size.Width) / 2,
        (Settings.Thumbnail.Size - size.Height) / 2);
    g.DrawImage(this._thumbnail,
    new Rectangle(location.X, location.Y, size.Width, size.Height),
    new Rectangle(0, 0, this._thumbnail.Width, this._thumbnail.Height), GraphicsUnit.Pixel);
    g.Dispose();
}

我在表单中使用ImageList.TransparentColor = Color.Purple使其看起来很好。