Return 降低质量后来自函数的位图图像
Return Bitmap image from function after decreasing quality
我从网上找到这个功能。将图像的大小减小到 50%。
现在我无法 return 下面的位图图像形式功能。
我找不到任何方法将当前位图图像放大到 50% 并且 return 它。
我需要创建一个内存流然后保存在那里吗?
//reduce Image size
public void ReduceImageSize(Bitmap bmp1)
{
var jgpEncoder = GetEncoder(ImageFormat.Jpeg);
// Create an Encoder object based on the GUID
// for the Quality parameter category.
var myEncoder = Encoder.Quality;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
var myEncoderParameters = new EncoderParameters(1);
var myEncoderParameter = new EncoderParameter(myEncoder, 50L);
myEncoderParameters.Param[0] = myEncoderParameter;
//rather than saving it should set to the current bitmap image.
//bmp1.Save(@"c:\TestPhoto\TestPhotoQualityFifty.jpg", jgpEncoder, myEncoderParameters);
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
var codecs = ImageCodecInfo.GetImageDecoders();
foreach (var codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
}
您应该只将文件保存到内存中,然后从该内存构建一个新图像:
using(var ram = new MemoryStream())
{
bmp1.Save(ram, jgpEncoder, myEncoderParameters);
ram.Seek(0, SeekOrigin.Begin); // reset stream to start so it can be read again
return new Bitmap(ram);
}
我从网上找到这个功能。将图像的大小减小到 50%。 现在我无法 return 下面的位图图像形式功能。
我找不到任何方法将当前位图图像放大到 50% 并且 return 它。
我需要创建一个内存流然后保存在那里吗?
//reduce Image size
public void ReduceImageSize(Bitmap bmp1)
{
var jgpEncoder = GetEncoder(ImageFormat.Jpeg);
// Create an Encoder object based on the GUID
// for the Quality parameter category.
var myEncoder = Encoder.Quality;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
var myEncoderParameters = new EncoderParameters(1);
var myEncoderParameter = new EncoderParameter(myEncoder, 50L);
myEncoderParameters.Param[0] = myEncoderParameter;
//rather than saving it should set to the current bitmap image.
//bmp1.Save(@"c:\TestPhoto\TestPhotoQualityFifty.jpg", jgpEncoder, myEncoderParameters);
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
var codecs = ImageCodecInfo.GetImageDecoders();
foreach (var codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
}
您应该只将文件保存到内存中,然后从该内存构建一个新图像:
using(var ram = new MemoryStream())
{
bmp1.Save(ram, jgpEncoder, myEncoderParameters);
ram.Seek(0, SeekOrigin.Begin); // reset stream to start so it can be read again
return new Bitmap(ram);
}