c# - 在.Net中,将“图像”与另一张图像转换时,会影响其中一张图像的颜色质量
问题描述
在 .net 应用程序中,当图像被处理并与另一个图像合并时,它的颜色会受到影响。图片图片 ---------> 上传图片
位图 xy = new Bitmap(image, image.Width, image.Height); -----> 转换为位图以执行各种操作,例如调整大小或与另一个图像合并。
所以“图像”对象有很少的“属性项”,当我们将图像转换为位图类型的对象时,这些“属性项”数组是空的,这意味着这些“属性项”在此转换中没有移动。
现在将此图像移动到位图对象以与另一个图像合并后,“PropertyItems”数组为空
由于这些属性项的丢失,图像的颜色发生了变化。
对于合并,我使用下面的代码
public string MergeImages(List<BlockPositionDetailsWithSize> blockPositionDetailsWithSize, int layoutWidth, int layoutHeight)
{
var bitmap = new Bitmap(layoutWidth-75, layoutHeight);
float width = 0, height = 0;
using (var g = Graphics.FromImage(bitmap))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
var bitmapImg = blockPositionDetailsWithSize.Where(b => b.BlockId.Contains("fImageBlock")).FirstOrDefault();
// This loop is placing two images in graphic object
foreach (var block in blockPositionDetailsWithSize)
{
width = block.Width;
height = block.Height;
g.DrawImage(block.BlockImage, block.PosX, block.PosY, block.Width, block.Height);
}
}
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg); // change image format
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bitmap.SetResolution(288, 288);
System.Drawing.Imaging.Encoder imgEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters imgEncoderParameters = new EncoderParameters(1);
EncoderParameter imgEncoderParameter = new EncoderParameter(imgEncoder, 95L); //A quality level of 0 corresponds to the greatest compression, and a quality level of 100 corresponds to the least compression.
imgEncoderParameters.Param[0] = imgEncoderParameter;
bitmap.Save(ms, jpgEncoder, imgEncoderParameters);
byte[] byteImage = ms.ToArray();
string base64String = string.Empty;
base64String = Convert.ToBase64String(byteImage); ////Get Base64
return base64String;
}
图像的颜色质量可以通过以下代码保持
foreach (System.Drawing.Imaging.PropertyItem item in bitmapImg.BlockImage.PropertyItems)
{
try
{
bitmap.SetPropertyItem(item);
}
catch
{
}
}
现在的问题是我无法在最终图像上应用一个图像的属性项(合并后生成)。因为当我将一个图像的属性项应用到另一个图像上时,第二个图像的颜色质量会受到影响,但如果我不应用,那么第一个图像的颜色质量就会受到影响。
所以我正在寻找在不丢失任何属性项目的情况下合并两个图像的方法。
解决方案
推荐阅读
- javascript - 如何在手动添加的字段中插入值而脚本 imgur 不生成另一个?
- react-native - 反应原生平面列表改变方向
- c++ - Intel NCS2 vpu 不支持动态批处理
- c# - 替换字符串句子中的多个单词C#
- elasticsearch - Filebeat hassting 问题
- python - 如何从开关访问开关参数/ ID?
- laravel - 在 laravel 中同时以用户和管理员身份登录
- nginx - Kubernetes 上的 nginx 无法访问 Angular 应用程序
- vue.js - 当 vue 项目位于子目录中时,如何使用 webpack 设置 vscode / chrome 调试器
- javascript - selectionStart 和 selectionEnd 返回不准确的索引 (IE)