为什么 CroppedBitmap 会产生不可见的图像?
Why does CroppedBitmap result in an invisible image?
我正在尝试使用 CroppedBitmap 在 WPF 图像元素上显示 PNG 文件的一部分。
作为测试,我有以下代码:
BitmapImage StandardTilesetImage = new BitmapImage();
StandardTilesetImage.BeginInit();
StandardTilesetImage.CacheOption = BitmapCacheOption.OnLoad;
StandardTilesetImage.UriSource = new Uri(pngFilePath, UriKind.Relative);
StandardTilesetImage.EndInit();
// TestImage is an Image object defined in XAML
TestImage.Source = StandardTilesetImage;
这会产生预期的结果 - 图像正确显示:
作为参考,pngFilePath 是一个指向绝对位置 (c:/etc/etc/StandardTilesetIcons.png
) 的字符串,它是一个 512x512 PNG:
如果我修改上面的代码以裁剪一部分 PNG(例如绘制左上角的 64x64 区域),则 TestImage 将不再显示任何内容。
BitmapImage StandardTilesetImage = new BitmapImage();
StandardTilesetImage.BeginInit();
StandardTilesetImage.CacheOption = BitmapCacheOption.OnLoad;
StandardTilesetImage.UriSource = new Uri(pngFilePath, UriKind.Relative);
StandardTilesetImage.EndInit();
CroppedBitmap croppedBitmap = new CroppedBitmap();
croppedBitmap.SourceRect = new Int32Rect(0,0,64, 64);
croppedBitmap.Source = StandardTilesetImage;
TestImage.Source = croppedBitmap;
我希望在我的 TestImage 对象中看到一部分 PNG。为什么什么都没有显示?
和BitmapImage一样,CroppedBitmap实现了ISupportInitialize
接口,这意味着当你通过默认构造函数创建一个实例时,你必须先调用BeginInit()
和EndInit()
方法并在设置其任何属性后。
或者,使用适当的构造函数和 类:
提供的参数
BitmapImage standardTilesetImage = new BitmapImage(
new Uri(pngFilePath, UriKind.RelativeOrAbsolute));
CroppedBitmap croppedBitmap = new CroppedBitmap(
standardTilesetImage, new Int32Rect(0,0,64, 64));
TestImage.Source = croppedBitmap;
我正在尝试使用 CroppedBitmap 在 WPF 图像元素上显示 PNG 文件的一部分。
作为测试,我有以下代码:
BitmapImage StandardTilesetImage = new BitmapImage();
StandardTilesetImage.BeginInit();
StandardTilesetImage.CacheOption = BitmapCacheOption.OnLoad;
StandardTilesetImage.UriSource = new Uri(pngFilePath, UriKind.Relative);
StandardTilesetImage.EndInit();
// TestImage is an Image object defined in XAML
TestImage.Source = StandardTilesetImage;
这会产生预期的结果 - 图像正确显示:
作为参考,pngFilePath 是一个指向绝对位置 (c:/etc/etc/StandardTilesetIcons.png
) 的字符串,它是一个 512x512 PNG:
如果我修改上面的代码以裁剪一部分 PNG(例如绘制左上角的 64x64 区域),则 TestImage 将不再显示任何内容。
BitmapImage StandardTilesetImage = new BitmapImage();
StandardTilesetImage.BeginInit();
StandardTilesetImage.CacheOption = BitmapCacheOption.OnLoad;
StandardTilesetImage.UriSource = new Uri(pngFilePath, UriKind.Relative);
StandardTilesetImage.EndInit();
CroppedBitmap croppedBitmap = new CroppedBitmap();
croppedBitmap.SourceRect = new Int32Rect(0,0,64, 64);
croppedBitmap.Source = StandardTilesetImage;
TestImage.Source = croppedBitmap;
我希望在我的 TestImage 对象中看到一部分 PNG。为什么什么都没有显示?
和BitmapImage一样,CroppedBitmap实现了ISupportInitialize
接口,这意味着当你通过默认构造函数创建一个实例时,你必须先调用BeginInit()
和EndInit()
方法并在设置其任何属性后。
或者,使用适当的构造函数和 类:
提供的参数BitmapImage standardTilesetImage = new BitmapImage(
new Uri(pngFilePath, UriKind.RelativeOrAbsolute));
CroppedBitmap croppedBitmap = new CroppedBitmap(
standardTilesetImage, new Int32Rect(0,0,64, 64));
TestImage.Source = croppedBitmap;