У меня есть метод, который проверяет, является ли пиксель в указанной c точке на BitmapImage прозрачным:
public static async Task<bool> IsPixelTransparent(Point hitPosition, BitmapImage sourceImage)
{
var randomStream = await RandomAccessStreamReference.CreateFromUri(sourceImage.UriSource).OpenReadAsync();
randomStream.Seek(0);
var decoder = await BitmapDecoder.CreateAsync(randomStream);
var pixelData = await decoder.GetPixelDataAsync();
var pixels = pixelData.DetachPixelData();
var rowWidth = decoder.PixelWidth * 4;
var rowOffset = hitPosition.Y * rowWidth;
var colOffset = hitPosition.X * 4;
var totalOffset = rowOffset + colOffset;
var alpha = pixels[totalOffset + 3];
return alpha == 0;
}
Теперь мне нужно оптимизировать это, не загружая изображение каждый раз в память это бег. Это означает, что мне нужно создать IRandomAccessStream
из BitmapImage
без использования метода CreateFromUri()
. Это кажется тривиальной задачей в WPF или даже с Windows добавочным номером телефона, но почти невозможно в чистом UWP.
Подпись метода должна остаться прежней, я могу ' я не могу изменить то, что передается внутрь или наружу (я бы sh смог бы).
Я изучил все, от WriteableBitmap
и пиксельных буферов, до методов и событий в базовых классах. BitmapImage
. Я зашел в тупик, любая помощь приветствуется.