我正在将图像加载到我的Silverlight应用程序中。该图像将作为纹理贴图装入3D模型中。我需要获取图像属性。对于我使用ImageOpened事件,像这样:如何在Silverlight中获取图像的属性?
public MainPage()
{
BitmapImage img = new BitmapImage(new Uri("imagens/textura.jpg", UriKind.Relative));
img.ImageOpened += new EventHandler<RoutedEventArgs>(img_ImageOpened);
img.ImageFailed += new EventHandler<ExceptionRoutedEventArgs>(img_ImageFailed);
imageBrush.ImageSource = img;
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
this.MouseLeftButtonUp += new MouseButtonEventHandler(MainPage_MouseLeftButtonUp);
(...)
然后:
private void img_ImageOpened(object sender, RoutedEventArgs e)
{
BitmapImage i = sender as BitmapImage;
ImgSize.Width = i.PixelWidth;
ImgSize.Height = i.PixelHeight;
MessageBox.Show("LOADED IMAGE SIZE\n W:" + ImgSize.Width.ToString() + " H:" + ImgSize.Height.ToString());
}
MessageBox的是显示了加载图片的正确值。但这是在场景加载后运行的,所以大小总是默认(0,0)......我不知道如何解决这个问题。我运行了调试器,我注意到场景和模型被渲染,图片的宽度和高度都是零。在此之后,事件被解雇......我无法弄清楚。
由于提前,
何塞”
我不能这样做,因为我有很多对象,这取决于PageLoaded ..我正在使用Kit3D加Silverlight ..我有视口,网格和东西...当我指向imageBrush.ImageSource到img ,因为我认为这不取决于InitComponent(这是用于UI的东西) – jose 2009-11-20 12:08:19
我想我看不到足够的代码来告诉,例如什么'MainPage'派生自你的当前问题不可用。无论如何,您都需要将渲染与图像信息的可用性进行同步。它仍然不清楚为什么你不能将当前在PageLoaded中的代码推迟到ImageOpened事件。 – AnthonyWJones 2009-11-20 13:28:32