今天我有一个非常简单的问题:如何在UWP应用程序中创建位图并“绘制”它,更改其中的每个像素。
我在StackOverflow上已经阅读了很多东西,但现在我有点困惑,因为有很多不同的类型(WritableBitmap,SoftwareBitmap,BitmapImage,BitmapSource ......现在,在FCU中,他们甚至添加了BitmapIconSource .. 。)以及许多方式......但它们大多以给定的图像文件或来源开头,而不是我的情况。
让我们说,例如,我想要创建一个20x20位图,并希望为每个像素分配一个不同的argb值...然后将其分配给BitmapSource属性。 在UWP中,最好和最有效的方法是什么?
感谢您的耐心和关注。
祝你好运
答案 0 :(得分:1)
您可以使用WriteableBitmap
并直接修改PixelBuffer
:
var wb = new WriteableBitmap(100, 100);
byte[] imageArray = new byte[100 * 100 * 4];
for (int i = 0; i < imageArray.Length; i += 4)
{
//BGRA format
imageArray[i] = 0; // Blue
imageArray[i + 1] = 0; // Green
imageArray[i + 2] = 255; // Red
imageArray[i + 3] = 255; // Alpha
}
using (Stream stream = wb.PixelBuffer.AsStream())
{
//write to bitmap
await stream.WriteAsync(imageArray, 0, imageArray.Length);
}
TargetImage.Source = wb;
如果你想要更多的抽象,look into WriteableBitmapEx
增加了非常有用且易于使用的扩展方法和助手,使WriteableBitmap
变得轻而易举。