【问题标题】:How to use transparent image in WinCe 5.0?WinCe 5.0如何使用透明图片?
【发布时间】:2016-12-13 10:23:44
【问题描述】:

找到了将透明度与背景图像结合使用的示例,但此选项不适合我。因为假设背景会随着某些动作而改变。

【问题讨论】:

  • 您使用什么编程语言?例如 C# .NET 2.0 / 3.5 CompactFramework 或嵌入式 C++。
  • C# 3.5 CompactFramework
  • 也许将其添加到问题中(以及我对 Visual Studio 2008 的假设),我们可以删除这些 cmets。
  • 我已经添加了必要的标签。
  • 您尝试了哪些示例?当背景改变时发生了什么?你读过stackoverflow.com/questions/3659312/… 吗?您提供的有关您要达到的目标的详细信息越多,您获得答案的机会就越大。

标签: c# compact-framework windows-ce


【解决方案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);
    

【讨论】:

  • AlainD 不要告诉我如何在重新启动后修复错误,丢失桌面上的快捷方式。因此,如果您在 Program Files 中安装该程序,该程序也会消失。但是如果程序安装在系统文件夹中,它就会被存储。但是如何保证标签还是不明白。
  • @Macro:Windows CE 设备有一个固定的写保护段和一个用户区。您需要将自己的程序和快捷方式放在用户区。桌面通常不是用户区域,您放置在那里的任何快捷方式都将在重新启动时被删除。要让程序自动启动,您可以将其放入您的DEVICE-USER-AREA\Start 文件夹或HKLM\init\LaunchXXX 的注册表中。这是与原始问题不同的问题,因此您需要寻找答案或提出不同的问题。希望对您有所帮助。
  • AlainD 我创建了一个主题
猜你喜欢
  • 2013-01-14
  • 1970-01-01
  • 2011-03-13
  • 2013-01-19
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多