Я получил этот блок кода от link text и немного изменил его, потому что я хочу использовать его с моим загрузчиком AJAX, который нуждается в потоке, который будет использоваться для добавления загруженных элементов на экран вложений;Изменение размера изображения в ASP.NET - вывод как поток с уменьшенным размером изображения для
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);
}
}
Я делаю это неправильно, возвращая поток обратно туда, откуда его зовут? Благодаря!
Вы рассмотрели возможность использования [библиотеки с открытым исходным кодом] (http://imageresizing.net), чтобы улучшить качество изображения и [избегать всех случаев краев] (http://nathanaeljones.com/163/20-image -resizing-ловушек /)? Вы можете заменить весь этот код на «ImageBuilder.Current.Build (httpPostedFile,« file.jpg », новый Resizeettings (« width = value & height = value »));'. –