c#当裁剪图像出现黑色边框时
c# when crop an image black border appear
对不起我的英语。我试图在拖动后裁剪图像。它有效,但我的问题是,黑色粗体边框出现在裁剪后的图像上。不知道怎么解决。
这是我的代码:
using (Bitmap sourceBitmap = new Bitmap(fullSizeImage))
{
Rectangle cropRect = new Rectangle(0, 0, sourceWidth, sourceHeight);
using (Bitmap newBitMap = new Bitmap(cropRect.Width, cropRect.Height))
{
using (Graphics g = Graphics.FromImage(newBitMap))
{
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.CompositingMode = CompositingMode.SourceCopy;
g.DrawImage(sourceBitmap, new Rectangle(0, pp, sourceWidth, sourceHeight), cropRect, GraphicsUnit.Pixel);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders()[4];
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
newBitMap.Save(filePath);
}
}
}
这里是裁剪后的图片:
您的目标图像具有相同的物理尺寸,因为您使用相同的物理尺寸来创建它:
Rectangle cropRect = new Rectangle(0, 0, sourceWidth, sourceHeight);
当您将原始图像绘制到这个新位图中时,您使用偏移量 pp
绘制它,但仍然具有相同的高度和宽度(因此您只裁剪了底部和右侧)。此偏移 "colours" 新位图的内存仅从该 y 坐标向下,因此您有黑色边框。
对不起我的英语。我试图在拖动后裁剪图像。它有效,但我的问题是,黑色粗体边框出现在裁剪后的图像上。不知道怎么解决。
这是我的代码:
using (Bitmap sourceBitmap = new Bitmap(fullSizeImage))
{
Rectangle cropRect = new Rectangle(0, 0, sourceWidth, sourceHeight);
using (Bitmap newBitMap = new Bitmap(cropRect.Width, cropRect.Height))
{
using (Graphics g = Graphics.FromImage(newBitMap))
{
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.CompositingMode = CompositingMode.SourceCopy;
g.DrawImage(sourceBitmap, new Rectangle(0, pp, sourceWidth, sourceHeight), cropRect, GraphicsUnit.Pixel);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders()[4];
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
newBitMap.Save(filePath);
}
}
}
这里是裁剪后的图片:
您的目标图像具有相同的物理尺寸,因为您使用相同的物理尺寸来创建它:
Rectangle cropRect = new Rectangle(0, 0, sourceWidth, sourceHeight);
当您将原始图像绘制到这个新位图中时,您使用偏移量 pp
绘制它,但仍然具有相同的高度和宽度(因此您只裁剪了底部和右侧)。此偏移 "colours" 新位图的内存仅从该 y 坐标向下,因此您有黑色边框。