У меня есть изображение, на котором я изменяю размер изображения до размера миниатюры, он отлично работает, если я использую размер изображения [700 (ширина) * 600 (высота)]. Исходный размер позволяет сказать, что у меня есть 10 изображений этого размера

но если я использую изображение размером около [1100 * 1200] первоначального размера он изменяет размер изображения на миниатюру, но не соответствует размеру другого миниатюрного изображения

При отображении в элементе управления списком все изображения размером [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

Любая помощь была бы большой спасибо

1
happysmile 2 Дек 2009 в 10:10
Итак, у вас есть 2 проблемы: одна - это постоянство соотношения сторон, а другая - некоторые изображения с измененным размером не отображаются, да?
 – 
o.k.w
2 Дек 2009 в 10:14
 – 
Galilyou
2 Дек 2009 в 10:18
Я вот в чем проблема, что ты сказал
 – 
happysmile
2 Дек 2009 в 13:49

2 ответа

Лучший ответ

Я не понимаю, в чем проблема с вашим кодом, однако я бы предложил использовать объект 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
Galilyou 2 Дек 2009 в 10:36

Элемент управления 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 в форме, чтобы она выглядела хорошо.

0
rmrrm 20 Дек 2011 в 16:37