1

我正在从我的应用程序中生成一个磁贴,当它显示用作磁贴基础的背景图像时,它失去了透明度(因此它没有拾取主题颜色。

背景图像上有一个图标并且是透明的 - 当我将它用作标准平铺时(即不使用它生成图像)然后它很好并且透明度都很好..

但是当我将它用作背景图像并在其上添加我自己的容器时,它不透明,背景显示为黑色。

相关代码如下:

    // [...]
    var container = new Grid(); 

    if (isWide)
    {     
        container = CreateContainerWide(tileInfo);
    }
    else
    {
        container = CreateContainerMedium(tileInfo);
    }

    // Add the background
    container.Background = new ImageBrush
    {
        ImageSource = background,
        Opacity = opacity
    };

    // Force the container to render itself
    container.Arrange(new Rect(0, 0, width, height));

    // Write the image to disk and return the filename
    return WriteShellTileUIElementToDisk(container, baseFileName);
}

static string WriteShellTileUIElementToDisk(UIElement element, string baseFileName)
{
    var wb = new WriteableBitmap(element, null);

    // All content must be in this sub-folder of IsoStore
    string fileName = SharedImagePath + baseFileName + ImageExtension;
    var stream = new IsolatedStorageFileStream(fileName, System.IO.FileMode.Create, Isf);

    // Write the JPEG using the standard tile size
    // Sometimes the bitmap has (0,0) size and this fails for unknown reasons with an argument exception
    if (wb.PixelHeight > 0)
        wb.SaveJpeg(stream, wb.PixelWidth, wb.PixelHeight, 0, JpegQuality);
    else
    {
        Debug.WriteLine("Can't write out file because bitmap had 0,0 size; not sure why");
        // indicate that there is an issue
        fileName = null;
    }

    stream.Close();

    // Return the filename
    return fileName;
}

我将 ImageBrush 的不透明度设置为什么似乎没有任何区别。

如果我使用纯色而不是透明层,那么一切都很好。不知何故,png的创建正在失去透明度。

有任何想法吗?

  • 谢谢
4

1 回答 1

0

这个答案可能会有所帮助。您可以将图像保存为支持透明度的 PNG,而不是保存 JPG。答案中提到的库非常有用。

于 2013-04-29T20:04:28.037 回答