Изменение размера изображения в ASP.NET - вывод в виде потока измененного изображения для - PullRequest
1 голос
/ 20 августа 2009

Я получил этот блок кода из текст ссылки и немного изменил его, потому что я хочу использовать его с моим AJAX Uploader, которому нужен поток для добавления загруженных элементов на дисплей вложений;

public Stream ResizeFromStream(int MaxSideSize, Stream Buffer)
{
    int intNewWidth;
    int intNewHeight;
    System.Drawing.Image imgInput = System.Drawing.Image.FromStream(Buffer);

    // GET IMAGE FORMAT
    ImageFormat fmtImageFormat = imgInput.RawFormat;

    // GET ORIGINAL WIDTH AND HEIGHT
    int intOldWidth = imgInput.Width;
    int intOldHeight = imgInput.Height;

    // IS LANDSCAPE OR PORTRAIT ?? 
    int intMaxSide;

    if (intOldWidth >= intOldHeight)
    {
        intMaxSide = intOldWidth;
    }
    else
    {
        intMaxSide = intOldHeight;
    }


    if (intMaxSide > MaxSideSize)
    {
        // SET NEW WIDTH AND HEIGHT
        double dblCoef = MaxSideSize / (double)intMaxSide;
        intNewWidth = Convert.ToInt32(dblCoef * intOldWidth);
        intNewHeight = Convert.ToInt32(dblCoef * intOldHeight);
    }
    else
    {
        intNewWidth = intOldWidth;
        intNewHeight = intOldHeight;
    }

    // CREATE NEW BITMAP
    Bitmap bmpResized = new Bitmap(imgInput, intNewWidth, intNewHeight);

    // SAVE BITMAP TO STREAM
    MemoryStream imgStream = new MemoryStream();
    bmpResized.Save(imgStream, imgInput.RawFormat);

    // RELEASE RESOURCES
    imgInput.Dispose();
    bmpResized.Dispose();
    Buffer.Close();

    return imgStream;
} 

и вызывается в этом блоке кода;

private void ItemPicture_FileUploaded(object sender, UploaderEventArgs args)
{
    if (GetVisibleItemCount() >= 5)
        return;

    using (System.IO.Stream stream = args.OpenStream())
    {
        ImageResize ir = new ImageResize();
        // This returns a 0 byte stream
        ItemPictureAttachments.Upload(args.FileSize, args.FileName, ir.ResizeFromStream(640, stream));
        // This works fine
        // ItemPictureAttachments.Items.Add(args.FileSize, args.FileName, stream);
    }
}

Я делаю это неправильно, возвращая поток туда, откуда он вызывается? Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 августа 2009

Я протестировал ваш метод ResizeFromStream, используя свойство PostedFile.Inputstream обычного элемента управления ASP.NET File, и это работало нормально. Возможно, проблема в компоненте, который вы используете для получения потока файла (args.OpenStream ())?

0 голосов
/ 20 августа 2009

На основании вашего кода все выглядит хорошо. Я предлагаю вам поставить точку останова на

Bitmap bmpResized = new Bitmap(imgInput, intNewWidth, intNewHeight);

и проверьте, не пуст ли imgInput. Или, возможно, что-то не так с ImageRawFormat.

...