我拼命想要将可写位图设置为辅助图块图像的来源。我想我差不多了,但它拒绝工作。任何人都能看到我错过的东西吗?我会非常感激的!
我正在使用以下方法创建位图:
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%透明的。
答案 0 :(得分:0)
更正代码后,它会在此处提到的目录中生成一个有效的.png文件: C:\用户\\应用程序数据\本地\套餐\\ 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;
}