gpt4 book ai didi

bytearray - 创建缩略图,然后转换为字节数组

转载 作者:行者123 更新时间:2023-12-04 12:02:06 26 4
gpt4 key购买 nike

我有很多时间创建缩略图,然后将它们转换为字节数组。我尝试了三种方法,所有 3 次都出现错误。

第一个是使用Bitmap.GetThumbnailImage,我过去用过,然后直接保存到Response.OutputStream

第二个是使用 System.Drawing.Graphics 和 DrawImage()。还是不行。

第三个就是创建一个新的位图,传入旧的位图,并设置新的大小。同样的错误。

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



这是我的方法的代码。也许有人会看到我做错了什么。如果您不确定 GetThumbSize,它只是一种接收图像大小和最大拇指大小,然后计算实际大小以保持纵横比的方法。
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();
}
}
}
}
}

}

这一行抛出错误:
thumb.Save(outStream, thumb.RawFormat);

有任何想法吗?谢谢您的帮助!

最佳答案

我认为问题可能出在原始图像的编码上。 IIRC, Save(stream, format) 导致调用 Save(stream, encoder, params),编码器取自格式;在您的情况下,这是图像的原始格式。

根据 Save method 的社区内容,某些格式无法很好地转换为合适的编码器。

我建议你自己指定编码器,使用一些标准格式,比如 PNG。

尝试:

thumb.Save(outStream, ImageFormat.Png, null); // optionally add encoder parameters here, like quality or luminescence

关于bytearray - 创建缩略图,然后转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/894098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com