从编程创建的可写位图设置二级平铺图像

本文关键字:二级 图像 设置 创建 编程 位图 | 更新日期: 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;
        }