【问题标题】:How to know what is the length of an edge in a resized image?如何知道调整大小的图像中边缘的长度是多少?
【发布时间】:2015-03-07 10:56:08
【问题描述】:

假设我想点击一张图片并放大上面我点击的部分。我用最简单的代码做到这一点,但在图像的底部有一个恼人的边缘,因为放大了。

没有Graphics参与,所以我不能使用SetWrapMode(WrapMode.TileFlipXY);graphic.CompositingMode = CompositingMode.SourceCopy;

我可以裁剪烦人的边缘部分(它不重要),但我不知道它的高度是多少。

我如何知道它的高度以便裁剪它?更好的是 - 有没有更好的方法来放大图像(我需要一个返回位图的方法,以便以后保存)?

简单代码:

private void button1_Click(object sender, EventArgs e)
{   
    try
    {   
        Bitmap img = new Bitmap(imageLoc);
        Rectangle cropArea = new Rectangle(0, 0, img.Width, yLoc);
        Bitmap bmpImage = new Bitmap(img);
        Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);

        pictureBox1.Image = resizeImage(bmpCrop, new Size(bmpCrop.Width, newHeight));
    }
    catch
    {
    }
}

public static Bitmap resizeImage(Image imgToResize, Size size)
{
    return new Bitmap(imgToResize, size);
}

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
    xLoc = e.X;
    yLoc = e.Y;
}

烦人的边缘(看底部):

【问题讨论】:

  • 如果我理解正确,您的原始图形底部有一个白色或透明区域。为避免您看到的问题,您可能应该在进行调整大小操作之前裁剪掉底部的这个区域。您应该能够通过检查图像中的像素来确定该区域有多大。
  • 没有。我的原始图像没有白色区域。我调整图像大小后出现白色。
  • 这对我来说听起来很奇怪。图像是否具有像素的不透明度值,即它是每像素 32 位还是每像素 24 位?
  • 我不知道。原图是:flickr.com/photos/ikkoskinen/329634175 我所做的是调整天空的大小(建筑物上方几个像素的蓝色部分)。
  • 好的,原图是.jpg,一般没有不透明通道。您下载的是原始尺寸 1500 x 1125 还是 Flickr 调整大小的版本?只是为了它,您是否可以尝试下载原始大小(如果您还没有这样做)并将其转换为 .png ,然后再将其提取到您的程序中?您可以使用任何图形编辑程序进行转换 - 我喜欢 Gimp,但即使是 Windows Paint 也应该能够做到。 (这是因为我真的不相信 .jpg 图像不包含压缩伪影。)

标签: c# .net image scaling


【解决方案1】:

我认为这是由使用双三次或线性插值的调整大小算法造成的。这些算法通过对周围像素的值进行采样并对其进行插值来计算调整大小后的像素值。在原始边缘像素的情况下,它们下面的像素没有值,因此倾向于透明(即变亮),因为周围像素的平均值考虑到它们的下一个像素缺失。

要消除这样的尺寸缺陷,您可能需要研究使用 Graphics 对象以及通过该对象可用的各种质量和算法设置来调整尺寸。

【讨论】:

  • 相信我,我研究图形对象无济于事(我通过研究构建了一个精心设计的程序。这是我的最后一个错误)。我在问你一个问题,你不能回答我“调查”。
  • 是的,但是您在问题中拒绝使用 Graphics 对象 - 但答案是“使用图形对象”。快速研究将显示像 stackoverflow.com/questions/4772273/… 这样的答案,它说明了您获得的插值模式伪影,并提供了解决方案。如果您的问题是“我不打算使用 GDI+ 图形对象 - 我怎样才能摆脱这个人工制品”,那么答案是“你不能”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多