【发布时间】: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 图像不包含压缩伪影。)