J'ai reçu ce bloc de code de link text et je l'ai légèrement modifié car je veux l'utiliser avec mon Uploader AJAX qui nécessite l'utilisation d'un Stream. pour ajouter des éléments téléchargés dans l'affichage des pièces jointes;Redimensionnement de l'image dans ASP.NET - Sortie en tant que flux de l'image redimensionnée pour
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;
}
et étant appelé dans ce bloc de code;
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);
}
}
Est-ce que je fais mal de retourner le flux à l'endroit où il est appelé? Merci!
Avez-vous envisagé d'utiliser [une bibliothèque open-source] (http://imageresizing.net) pour obtenir une meilleure qualité d'image et [éviter tous les cas de bords] (http://nathanaeljones.com/163/20-image -resizing-pièges /)? Vous pouvez remplacer tout ce code par 'ImageBuilder.Current.Build (httpPostedFile," file.jpg ", new Resizeettings (" largeur = valeur & hauteur = valeur ")); –