Tôi đang có một thời gian với việc tạo hình thu nhỏ và sau đó chuyển đổi chúng thành một mảng byte. Tôi đã thử ba phương pháp, và tất cả 3 lần tôi nhận được một lỗi.Tạo một hình thu nhỏ và sau đó chuyển đổi thành mảng byte
đầu tiên được sử dụng Bitmap.GetThumbnailImage, mà tôi đã sử dụng trong quá khứ và sau đó được lưu trực tiếp vào Response.OutputStream
Thứ hai đã sử dụng System.Drawing.Graphics với drawImage(). Vẫn không đi.
Thứ ba chỉ là tạo bitmap mới, chuyển vào bitmap cũ và đặt kích thước mới. Lỗi tương tự.
Value cannot be null.
Parameter name: encoder
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: encoder
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentNullException: Value cannot be null.
Parameter name: encoder]
System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) +615244
Đây là mã cho phương pháp của tôi. Có lẽ ai đó sẽ thấy những gì tôi đang làm sai. Trong trường hợp bạn không chắc chắn về GetThumbSize, nó chỉ đơn giản là một phương pháp mà có kích thước hình ảnh và kích thước ngón tay cái tối đa và sau đó tính toán một kích thước thực tế để bảo tồn tỷ lệ khung hình.
public static System.Drawing.Image.GetThumbnailImageAbort thumbnailCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
public static bool ThumbnailCallback()
{
return false;
}
/// <summary>
///
/// </summary>
/// <param name="image"></param>
/// <param name="size"></param>
/// <remarks>
/// This method will throw a AccessViolationException when the machine OS running the server code is windows 7.
/// </remarks>
/// <returns></returns>
public static byte[] CreateThumbnail(byte[] imageData, Size size)
{
using (MemoryStream inStream = new MemoryStream())
{
inStream.Write(imageData, 0, imageData.Length);
using (System.Drawing.Image image = Bitmap.FromStream(inStream))
{
Size thumbSize = GetThumbSize(new Size(image.Width, image.Height), size);
//do not make image bigger
if (thumbSize.Equals(image.Size) || (image.Width < size.Width || image.Height < size.Height))
{
//if no shrinking is ocurring, return the original bytes
return imageData;
}
else
{
using (System.Drawing.Image thumb = image.GetThumbnailImage(thumbSize.Width, thumbSize.Height, thumbnailCallback, IntPtr.Zero))
{
using (MemoryStream outStream = new MemoryStream())
{
thumb.Save(outStream, thumb.RawFormat);
return outStream.ToArray();
}
}
}
}
}
}
Dòng này được ném lỗi:
thumb.Save(outStream, thumb.RawFormat);
Bất kỳ ý tưởng? Cảm ơn đã giúp đỡ!
Sự cố này trên Microsoft Connect: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98452 –