1

我拼命尝试将可写位图设置为辅助图块图像的来源。我想我快到了,但它拒绝工作。谁能看到我错过了什么?我会很感激!

我正在使用以下方法创建位图:

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% 透明的。

4

1 回答 1

0

更正代码后,它在此处提到的目录中生成了一个有效的 .png 文件:C:\Users\\AppData\Local\Packages\\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;
        }
于 2013-04-06T13:29:22.213 回答