0

一連の画像を使用する開発中の WinRT アプリがあります。画像の一部に、より大きなバージョンの画像サムネイルを表示します。

これらのサムネイルの画像ソースは、1024x768 のそれぞれの大きな画像です。サイズ変更は、Image 要素のサムネイルに対して C# で動的に行われます。縦横比も4:3のままです。

これは WinRT が画像のサイズを変更する唯一の方法ですか、それともピクセル化を抑えてより優雅に画像要素のサイズを動的に変更する方法はありますか?

PS: 画面上のサムネイルの数と画面の解像度に応じて、サムネイルのサイズが動的であるため、画像の小さいバージョンも作成できません。

これが私の自動サイズ変更コードです。

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 の一部の画像は、Uniform に引き伸ばされていてもピクセル化されているように見えるため、これはコードの問題ではないと思います。小さな画像を正確なサイズで使用してみましたが、アプリの小さな画像はそのままピクセル化されているようです。しかし、2560x1440 の解像度で実行すると、イメージは期待どおりに見えます。

4

2 に答える 2

2

ScaleTransform を使ってみましたか?

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

画像のスケーリングと回転に関しては、変換が最も便利だと思います。

于 2012-11-02T02:40:21.037 に答える