我被困住了,我需要建议,我已经走了多个兔子洞并且找不到任何兔子......我不知道这是否是转换问题,解决问题,或者我只需要使用不同的对象类型,或者什么。我是处理图片的新手。请帮帮我!
我有一个WPF应用程序,它加载各种类型的图像,并将它们加载为BitmapImage对象。它们显示在图像控件中:
<Image Width="70" Height="90" Source="{Binding Path=Source}" />
此应用程序使用户能够在图像的一部分周围绘制矩形,然后应用程序将该矩形作为单独的图像保存到磁盘。我使用System.Drawing.Rectangle来存储矩形对象。这是一段代码片段,它只留下了比实际矩形小得多的图像部分。
Bitmap segment = new Bitmap(item.Width, item.Height);
var g = Graphics.FromImage(segment);
g.DrawImage(source, 0, 0, new Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);
segment.Save(imagePath, ImageFormat.Jpeg);
当我将矩形写入文件时会出现问题,因为Rectangle与Bitmap兼容,但与BitmapImage不兼容,至少在调整大小时是这样。当我将图像加载到BitmapImage时,它会使用PixelHeight和PixelWidth属性更改其大小。它的大小似乎大约翻了一番。我不知道为什么会那样做。但BitmapImage与WPF更兼容,所以我使用它。直接的Bitmap对象没有那些像素属性。矩形就像常规尺寸(不是倍增的像素尺寸)。
所以我尝试使用CroppedBitmap,因为它与BitmapImage兼容,以获取所选图像。所以我得到了尺寸增加比例并增加了我的矩形尺寸,以创建CroppedBitmap,但尺寸有点太小。它切断了外缘。 &#34;项目&#34;是我的矩形。这是代码示例。我应该坚持使用CroppedBitmap并抛出一些填充?或者我还应该做些什么呢?
double heightFactor = source.PixelHeight / source.Height;
double widthFactor = source.PixelWidth / source.Width;
CroppedBitmap segment = new CroppedBitmap(source, new Int32Rect(item.X, item.Y, Convert.ToInt32(Math.Ceiling(item.Width * widthFactor)), Convert.ToInt32(Math.Ceiling(item.Height * heightFactor))));