从编程创建的可写位图设置二级平铺图像
本文关键字:二级 图像 设置 创建 编程 位图 | 更新日期: 2023-09-27 18:07:33
我正在拼命地尝试设置一个可写的位图作为二级瓦片图像的来源。我想我就快成功了,但就是行不通。有人知道我错过了什么吗?我将非常感激!
我正在创建位图使用:
var bitmap = new WriteableBitmap(150, 150);
Stream stream = bitmap.PixelBuffer.AsStream();
stream.Seek(0, SeekOrigin.Begin);
var pixels = new byte[stream.Length];
for (int i = 0; i < pixels.Length; i += 4)
{
pixels[i] = 255;
pixels[i + 1] = 0;
pixels[i + 2] = 189;
pixels[i + 3] = 9;
}
stream.Write(pixels, 0, pixels.Length);
bitmap.Invalidate();
将图像保存到计算机:
await WriteableBitmapSaveExtensions.SaveToFile(bitmap, ApplicationData.Current.LocalFolder,"image.png", CreationCollisionOption.ReplaceExisting);
该图像可以在目录中找到:
C:'Users'<USER>'AppData'Local'Packages'<PKGID>'LocalState
我正在使用下面的方法创建第二个贴图:
CreateSecondaryTileFromWebImage("image.png", "tildId","shortName","displayName","arguments", MainPage.GetElementRect((FrameworkElement)sender));
public async Task CreateSecondaryTileFromWebImage(string bitmapName, string tileId, string shortName, string displayName, string arguments, Rect selection)
{
//Create uri
var bitmap = new Uri(string.Format("ms-appdata:///local/{0}", bitmapName));
//Create tile
SecondaryTile secondaryTile = new SecondaryTile(tileId, shortName, displayName, arguments, TileOptions.ShowNameOnLogo, bitmap);
//Confirm creation
await secondaryTile.RequestCreateForSelectionAsync(selection, Windows.UI.Popups.Placement.Above);
}
创建平铺并固定在开始屏幕上,但图像是100%透明的
修改代码后,它在这里提到的目录中产生了一个有效的。png文件:当地C:'Users' ' AppData ' '包' ' LocalState
事实证明,这是一个简单的问题,我是如何写WriteableBitmap像素。虽然WriteableBitmap数据流格式是ARGB,但字节需要向后写。在我的问题中,我实际上是将每个像素分配给:BGRA = 255,0,189,9
其中透明度字节设置为9,使图像接近100%透明,并给出它没有正确加载的外观。
因此,为了得到我想要的颜色,我需要写:
var pixels = new byte[stream.Length];
for (int i = 0; i < pixels.Length; i += 4)
{
pixels[i] = 9;
pixels[i + 1] = 189;
pixels[i + 2] = 0;
pixels[i + 3] = 255;
}