2013-01-06 177 views
0

我正在嘗試調整DirectX紋理的大小並將其放置在窗口的右上角。我使用的是精靈拉絲紋理,這裏是我的代碼(我用SharpDX):調整大小和定位SharpDX精靈

albumArtSprite.Begin(); 
NativeMethods.RECT rect; 
NativeMethods.GetClientRect(device.CreationParameters.HFocusWindow, out rect); 
float targetDimensions = 150f; 
var matrix = Matrix.Scaling(targetDimensions/albumArtInformation.Width, targetDimensions/albumArtInformation.Height, 0f) * 
Matrix.Translation(rect.Width - albumArtInformation.Width - 10f, 10f, 0f); 
albumArtSprite.Transform = matrix; 
albumArtSprite.Draw(albumArtTexture, new ColorBGRA(0xFFFFFFFF)); 
albumArtSprite.End(); 

出於某種原因,我變得非常奇怪的結果,如圖像不是,我希望它是哪個位於窗口的右上角,X軸和Y軸的偏移量爲10。這是我第一次使用DirectX,所以我不能100%確定這個矩陣的東西。

+0

經過深思熟慮後,簡單地交換兩個矩陣(乘以翻譯的比例)*應該使其工作。這是第二次有效地執行翻譯,所以它不會受到規模的影響,這是我現在正在發生的事情。 – VisualMelon

+0

是的,我不確定發生了什麼事情,所以我只是採取我的解決方法,因爲我沒有調整每一幀的大小,所以這不是什麼大問題。 – zemaster

回答

0

最後,我使用Bitmap和Graphics類在繪製圖像之前調整圖像的大小。

private static byte[] ResizeAlbumArt(byte[] originalAlbumArtData) 
{ 
    using (var originalStream = new MemoryStream(originalAlbumArtData)) 
    { 
     var original = new Bitmap(originalStream); 
     var target = new Bitmap(AlbumArtDimensions, AlbumArtDimensions); 

     using (var g = Graphics.FromImage(target)) 
     { 
      g.SmoothingMode = SmoothingMode.HighQuality; 
      g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      g.DrawImage(original, 0, 0, target.Width, target.Height); 
     } 

     using (var outputStream = new MemoryStream()) 
     { 
      target.Save(outputStream, ImageFormat.Bmp); 
      return outputStream.ToArray(); 
     } 
    } 
}