Проблема при изменении размера изображения до размера миниатюры - PullRequest
1 голос
/ 02 декабря 2009

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

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

при показе в элементе управления списком все изображения размером [700 * 600] показаны в одном размере

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

поэтому, когда я показываю изображение в контроль списка, так что это выглядит все 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 ]

1 голос
/ 02 декабря 2009

Я не вижу, в чем проблема с вашим кодом, однако я бы предложил использовать объект 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)); }
0 голосов
/ 09 января 2011

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

...