WPF LayoutTransform (Scale) 抛出异常,因为图像的 DesiredSize 是 NaN
WPF LayoutTransform (Scale) throws Exception because DesiredSize of Image is NaN
我正在这样设置图像的 ImageSource:
Stream imageStreamSource = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource,BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
BitmapSource bmSrc = decoder.Frames[0];
bmSrc.Freeze();
ImageSource = bmSrc;
Image 在 Scrollviewer 中使用了 ScaleTransform (LayoutTransform)。
需要 LayoutTransform 来更新 ScrollViewers 的内容大小。
我想将图像缩放到滚动查看器父级的大小(边界):
double horizontalAspectRatio = gridBounds.Width / image.Width;
double verticalAspectRatio = gridBounds.Height / image.Height;
if (horizontalAspectRatio > verticalAspectRatio) {
scaleTransformImage.ScaleX = scaleTransformImage.ScaleY = verticalAspectRatio;
MessageBox.Show("to height");
} else {
scaleTransformImage.ScaleX = scaleTransformImage.ScaleY = horizontalAspectRatio;
MessageBox.Show("to width");
}
执行此操作后,将抛出 InvalidOperationException,它表示测量图像的布局需要 DesireSize 不是 NaN。
我试着像这样手动测量和排列图像:
image.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
image.Arrange(new Rect(0d, 0d, gridBounds.Width, gridBounds.Height));
不过好像没有效果。
我刚刚开始使用 Transforms,还没有很多知识....
只要您没有显式设置Image控件的Width
和Height
属性,它们的值就会是NaN
,纵横比计算就会失败:
double horizontalAspectRatio = gridBounds.Width / image.Width;
double verticalAspectRatio = gridBounds.Height / image.Height;
您可以使用图像的 ActualWidth
和 ActualHeight
,或者如果尚未布局,则可以使用其 [=19= 的 Width
和 Height
]:
double horizontalAspectRatio = gridBounds.Width / image.Source.Width;
double verticalAspectRatio = gridBounds.Height / image.Source.Height;
我正在这样设置图像的 ImageSource:
Stream imageStreamSource = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource,BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
BitmapSource bmSrc = decoder.Frames[0];
bmSrc.Freeze();
ImageSource = bmSrc;
Image 在 Scrollviewer 中使用了 ScaleTransform (LayoutTransform)。
需要 LayoutTransform 来更新 ScrollViewers 的内容大小。
我想将图像缩放到滚动查看器父级的大小(边界):
double horizontalAspectRatio = gridBounds.Width / image.Width;
double verticalAspectRatio = gridBounds.Height / image.Height;
if (horizontalAspectRatio > verticalAspectRatio) {
scaleTransformImage.ScaleX = scaleTransformImage.ScaleY = verticalAspectRatio;
MessageBox.Show("to height");
} else {
scaleTransformImage.ScaleX = scaleTransformImage.ScaleY = horizontalAspectRatio;
MessageBox.Show("to width");
}
执行此操作后,将抛出 InvalidOperationException,它表示测量图像的布局需要 DesireSize 不是 NaN。
我试着像这样手动测量和排列图像:
image.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
image.Arrange(new Rect(0d, 0d, gridBounds.Width, gridBounds.Height));
不过好像没有效果。
我刚刚开始使用 Transforms,还没有很多知识....
只要您没有显式设置Image控件的Width
和Height
属性,它们的值就会是NaN
,纵横比计算就会失败:
double horizontalAspectRatio = gridBounds.Width / image.Width;
double verticalAspectRatio = gridBounds.Height / image.Height;
您可以使用图像的 ActualWidth
和 ActualHeight
,或者如果尚未布局,则可以使用其 [=19= 的 Width
和 Height
]:
double horizontalAspectRatio = gridBounds.Width / image.Source.Width;
double verticalAspectRatio = gridBounds.Height / image.Source.Height;