2012-10-21 70 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; 

我發現轉換對於縮放和旋轉圖像最有用。