2012-10-21 31 views
0

我有一个正在开发的WinRT应用程序,它使用了一堆图像。在图像的一部分中,我显示具有较大版本的图像缩略图。在WinRT中调整大小时的图像像素化

这些缩略图的图像源是相应的大图像,它是1024x768。动态调整大小是为了Image元素上的缩略图。我也保持了4:3的宽高比。

这是WinRT调整图像大小的唯一方法吗?还是有办法动态地调整图像元素的大小,使图像元素更加优雅,像素更少?

P.S:我无法创建较小版本的图像,这是因为缩略图的大小是动态的,这取决于屏幕上缩略图的数量和屏幕分辨率。

这是我的自动调整大小代码。

private void canvasObject() 
    { 
     for (int i = 1; i <= maxCards; i++) 
     { 
      objectList.Add(i); 
     } 

     Double h,w, hp=0,wp=0,hm; 
     w = ((objectCanvas.ActualWidth/9)); 
     h = (w * (4/3)); 
     hm = ((objectCanvas.ActualHeight/3)-h); 
     int count = 0; 

     for (int i = 0; i <= 3;i++) 
     { 
      wp = 0; 
      for (int j = 0; j < 9 && count < maxCards; j++) 
      { 
       count++; 
       Card c = new Card(); 
       ImageSource imgSrc1; 
       Random rnd = new Random(); 
       int rNum = rnd.Next(1, objectList.Count); 
       imgSrc1 = new BitmapImage(new Uri(@"ms-appx:/Assets/Images/Alphabets/Cards/" + (char)(objectList[rNum-1] + 96) + ".png", UriKind.Absolute)); 
       c.objectImg.Name = objectList[rNum-1].ToString(); 
       objectList.Remove(objectList[rNum-1]); 
       c.objectImg.SetValue(Image.SourceProperty, imgSrc1); 
       c.objectImg.Width = w; 
       c.objectImg.Height = h; 
       c.objectImg.Margin = new Thickness(10); 
       c.objectImg.SetValue(Canvas.LeftProperty,wp); 
       c.objectImg.SetValue(Canvas.TopProperty, hp); 
       wp += w; 
       c.objectImg.Tapped += objectImg_Tapped; 
       objectCanvas.Children.Add(c.objectImg); 
      } 
      hp += h+hm; 
     } 
    } 

思想,我不觉得这是与代码中的问题,如XAML一些图像看起来也即使它们被拉伸到统一的像素化。我甚至尝试使用较小的图像来确定它们的尺寸,但显然我的应用程序中的小图像正在像素化。但在2560x1440分辨率下运行时,图像看起来和预期的一样。

+0

你能表现出你做了什么一些代码?你有没有启用插值/反锯齿? – K3N

+0

添加代码。还增加了我尝试过的更多信息,但没有奏效。 –

回答

2

您是否尝试过使用ScaleTransform?

ScaleTransform st = new ScaleTransform(); 
st.Scale = 0.20f; 
c.objectImg.RenderTransform = st; 

我发现转换对于缩放和旋转图像最有用。