2013-10-07 57 views
2

我有一個圖像對象。圖像源是一個帶有透明度的白色圖形(精確地爲圓角矩形)。我想要的是能夠在不同的地方重複使用相同的圖像,但色調不同的圖像顏色。到目前爲止,我發現的最好的建議是在頂部繪製一個半透明的矩形,但這會顯示在透明度所在的角落。任何人都可以提出更好的選擇嗎Windows 8 XAML:着色圖像對象

+0

通過圓角矩形,是它的形狀可以使用Border/CornerRadius或Rectangle/RadiusX/Y進行復制,以便使用您已收到的「over-the-top」建議?如果是這樣的話,我們可以將它拖拽到一個ContentControl中,並允許您很容易地指定色調。如果它是一種更自定義的形狀,你可能會多花點心思。 –

+0

我認爲它需要更復雜的東西。我爲圖像添加了浮雕效果,其中一些形狀比簡單的圓角矩形更復雜。 –

回答

1

隨着BitmapDecoder你可以得到所有的像素數據的字節數組,那麼您可以手動抵消了部分ARGB值改變它,它在一個新的WriteableBitmap節省:

var picker = new FileOpenPicker(); 
picker.FileTypeFilter.Add(".jpg"); 
StorageFile file = await picker.PickSingleFileAsync(); 
if (file != null) 
{ 
    using (IRandomAccessStream ras = await file.Openasync(FileAccessMode.Read)) 
    { 
     BitmapDecoder decoder = await BitmapDecoder.CreateAsync(ras); 
     PixelDataProvider provider = await decoder.GetPixelDataAsync(decoder.BitmapPixelFormat, decoder.BitmapAlphaMode, new BitmapTransform(), ExifOrientationMode.RespectExifOrientation, ColorManagementMode.ColorManageToSRgb); 
     byte[] pixels = provider.DetachPixelData(); 
     for (int i = 0; i < pixels.Length; i += 4) 
     { 
      pixels[i] = (byte)(pixels[i] + 72); 
     } 
     WriteableBitmap bitmap = new WriteableBitmap((int)decoder.OrientedPixelWidth, (int)decoder.OrientedPixelHeight); 
     using (Stream stream = bitmap.PixelBuffer.AsStream()) 
     { 
      await stream.WriteAsync(pixels, 0, pixels.Length); 
     } 
     image.Source = bitmap; 
    } 
}