【发布时间】:2011-01-03 02:56:07
【问题描述】:
我是 WPF 新手,正在尝试使用 Controls.Image。当表单展开时,我将其设置为拉伸。我试图在运行时生成一个 Drawing.Bitmap 以显示在 WPF 中的 Controls.Image 上。当我生成 Drawing.Bitmap 时,我只想创建一个与屏幕上的 Image 控件一样大的控件(不要浪费 cpu 周期)。要创建图像,我有以下代码。 Bitmap bImage = new Bitmap((int)imgInput.Width, (int)imgInput.Height);imgInput 是 Controls.Image,bImage 显然是 Drawing.Bitmap。然而,imgInput.Width 和 Height 在运行时显示为 0,尽管它们绝对不是在设计时。如果我不尝试动态拉伸图像以随窗口扩展,则它不会按预期显示。那么我如何真正获得图像。还有比在内存中创建 Drawing.Bitmap 并将其转换为 WPF 的 ImageSource 更好的方法吗?我没有从 URI 或类似的东西加载图像,我必须在内存中创建它。
我通过以下代码绑定图片
imgInput.Source = loadBitmap(bImage);
}
[DllImport("gdi32")]
static extern int DeleteObject(IntPtr o);
public static BitmapSource loadBitmap(System.Drawing.Bitmap source)
{
BitmapSource bs = null;
IntPtr ip = source.GetHbitmap();
try
{
bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip,
IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
finally
{
DeleteObject(ip);
}
return bs;
}
【问题讨论】:
-
如何将位图绑定到图像?您是否在 XAML 中为您的图像明确设置了宽度/高度?
-
图像的宽度和高度设置为自动,但我相信这是允许水平和垂直对齐设置为拉伸的必要条件
-
这可以解释它 - 图像将根据其内容重新调整大小,因此在您将位图绑定到它之前它没有任何宽度
-
图像应该只调整大小到它的父级,当它的父级调整大小时,它也应该这样做
-
我猜最后一个问题是,有没有比 Bitmap 更好的东西可以让我指定每个像素的值,并且比转换 Bitmap 更有效
标签: .net wpf image-processing bitmap