我在 WPF 中使用 CroppedBitmap 方法裁剪图像。必需的输入参数是 int32Rect。但是,我的图像高度和宽度值是双倍(像素)。因此,如果不将 Double 截断为 Int,我想通过使用 double 值(像素)来裁剪图像
问问题
3421 次
1 回答
1
您需要使用PixelWidth和PixelHeight属性,如果看不到它们(Intellisense找不到它们),您可以使用as运算符将其转换为BitmapSource。例如:
BitmapSource src = yourImage as BitmapSource;
CroppedBitmap chunk = new CroppedBitmap(src, new Int32Rect(src.PixelWidth / 4, src.PixelHeight / 4, src.PixelWidth / 2, src.PixelHeight / 2));
顺便说一句,如果无法执行转换, as运算符将返回nullsrc
(因此您可能需要检查上述示例中的转换是否不在null
,除非您确定它yourImage
是从BitmapSource派生的)。
编辑 :
我不确定这是否是您需要的,但这是一个接受Rect(浮点值)作为输入并返回CroppedBitmap的方法:
public static CroppedBitmap GetCroppedBitmap(BitmapSource src, Rect r)
{
double factorX, factorY;
factorX = src.PixelWidth / src.Width;
factorY = src.PixelHeight / src.Height;
return new CroppedBitmap(src, new Int32Rect((int)Math.Round(r.X * factorX), (int)Math.Round(r.Y * factorY), (int)Math.Round(r.Width * factorX), (int)Math.Round(r.Height * factorY)));
}
例子:
BitmapImage bmp = new BitmapImage(new Uri(@"c:\Users\Public\Pictures\Sample Pictures\Koala.jpg", UriKind.Relative));
CroppedBitmap chunk = GetCroppedBitmap(bmp, new Rect(bmp.Width / 4, bmp.Height / 4, bmp.Width / 2, bmp.Height / 2));
JpegBitmapEncoder jpg = new JpegBitmapEncoder();
jpg.Frames.Add(BitmapFrame.Create(chunk));
FileStream fp = new FileStream("chunk.jpg", FileMode.Create, FileAccess.Write);
jpg.Save(fp);
fp.Close();
于 2013-01-08T19:37:19.693 回答