2
我有一個圖像對象。圖像源是一個帶有透明度的白色圖形(精確地爲圓角矩形)。我想要的是能夠在不同的地方重複使用相同的圖像,但色調不同的圖像顏色。到目前爲止,我發現的最好的建議是在頂部繪製一個半透明的矩形,但這會顯示在透明度所在的角落。任何人都可以提出更好的選擇嗎Windows 8 XAML:着色圖像對象
我有一個圖像對象。圖像源是一個帶有透明度的白色圖形(精確地爲圓角矩形)。我想要的是能夠在不同的地方重複使用相同的圖像,但色調不同的圖像顏色。到目前爲止,我發現的最好的建議是在頂部繪製一個半透明的矩形,但這會顯示在透明度所在的角落。任何人都可以提出更好的選擇嗎Windows 8 XAML:着色圖像對象
隨着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;
}
}
通過圓角矩形,是它的形狀可以使用Border/CornerRadius或Rectangle/RadiusX/Y進行復制,以便使用您已收到的「over-the-top」建議?如果是這樣的話,我們可以將它拖拽到一個ContentControl中,並允許您很容易地指定色調。如果它是一種更自定義的形狀,你可能會多花點心思。 –
我認爲它需要更復雜的東西。我爲圖像添加了浮雕效果,其中一些形狀比簡單的圓角矩形更復雜。 –