如何在WinCe 5.0中使用透明图像?

时间:2016-12-13 10:23:44

标签: c# compact-framework windows-ce

找到了使用透明度和背景图像的示例,但此选项不适合我。由于假设背景会因某些行为而改变。

1 个答案:

答案 0 :(得分:1)

不确定你在做什么,因为细节很轻,但希望这是有帮助的。我们使用具有透明度的图标(.ico)文件,如下所示。这些只是将背景更改为单一颜色。如果您需要更复杂的行为,那么这可能不合适。

  • 为项目添加一些图标(带有透明背景)。将Build Action设为Embedded Resource。在下面的示例中,我们使用名为ico1.ico的图标。

  • 定义用于保存图标的结构。根据您需要的背景颜色数量,您需要的每个图标/颜色组合都有一个实例。如果数字非常大或在设计时未知,那么您需要即时创建图标。

    public struct CacheGraphics
    {
        public Bitmap ico1White, ico1Blue;
    }
    public static CacheGraphics cacheGraphics;`
    
  • 缓存图标:

    cacheGraphics.ico1White = new Bitmap(GetIconImage("ico1", Color.White));
    cacheGraphics.ico1Blue = new Bitmap(GetIconImage("ico1", Color.Blue));`
    
  • 编写一个修改背景颜色的辅助函数:

    private static Bitmap GetIconImage(string szIcon, Color clrBackground)
    {
        // Convert an embedded icon into an image
    
        // Load icon
        string szImage = ("YOUR-PROJECT.Resources.Icons." + szIcon + ".ico");
        Assembly _assembly = Assembly.GetExecutingAssembly();
        Stream file = _assembly.GetManifestResourceStream(szImage);
        Icon icoTmp = new Icon(file);
    
        // Create new image
        Bitmap bmpNewIcon = new Bitmap(icoTmp.Width, icoTmp.Height, PixelFormat.Format32bppRgb);
    
        // Create a graphics context and set the background colour
        Graphics g = Graphics.FromImage(bmpNewIcon);
        g.Clear(clrBackground);
    
        // Draw current icon onto the bitmap
        g.DrawIcon(icoTmp, 0, 0);
    
        // Clean up...
        g.Dispose();
    
        // Return the new image
        return bmpNewIcon;
    }
    
  • 为每个图标定义一个简单的别名:

    // Alias which goes at the top of any file using icons: using icons = YOUR-PROJECT.CCommon.AppIcons;
    public enum AppIcons
    {
        ICO1_WHITE,
        ICO1_BLUE
    }
    
  • 编写帮助函数以根据请求返回缓存图标:

    public static Image GetCachedIcon(AppIcons eIcon)
    {
        // Return a cached icon image. These icons are cached at application startup.
        Image imgIcon = null;
        switch (eIcon)
        {
            // System Settings > Advanced
            case AppIcons.ICO1_WHITE:
                imgIcon = (Image)cacheGraphics.ico1White; break;
            case AppIcons.ICO1_BLUE:
                imgIcon = (Image)cacheGraphics.ico1Blue; break;
        }
    
        return imgIcon;
    }
    
  • 需要时使用图标:

    picturebox1.Image = CCommon.GetCachedIcon(icons.ICO1_WHITE);
    picturebox2.Image = CCommon.GetCachedIcon(icons.ICO1_BLUE);