C# 如何在没有第三方库的情况下在CF 2.0中生成透明图像?

C# 如何在没有第三方库的情况下在CF 2.0中生成透明图像?,c#,windows-mobile,compact-framework,bitmap,windows-ce,C#,Windows Mobile,Compact Framework,Bitmap,Windows Ce,有没有办法让图片在CF2.0中透明?我必须在文本框上放置一个小图像,但它必须是透明的,这样用户无论如何都可以看到文本。你有什么想法吗 多谢各位 特威克尔 编辑: 谢谢你的回答,我会检查这些链接了! 为了完成我的文章,以下是我想做的: 我想显示一个小图像(该图像还不存在,我必须创建ist,所以我对所有格式都完全开放),它是文本框右端的一个X。通过点击X,文本框中的文本将被删除…就像iPhone上一样。但我无法构建自己的控件,因为在我的项目中有太多的文本框,它们都是带有windows文本框的现成自定

有没有办法让图片在CF2.0中透明?我必须在文本框上放置一个小图像,但它必须是透明的,这样用户无论如何都可以看到文本。你有什么想法吗

多谢各位

特威克尔

编辑:

谢谢你的回答,我会检查这些链接了! 为了完成我的文章,以下是我想做的:


我想显示一个小图像(该图像还不存在,我必须创建ist,所以我对所有格式都完全开放),它是文本框右端的一个X。通过点击X,文本框中的文本将被删除…就像iPhone上一样。但我无法构建自己的控件,因为在我的项目中有太多的文本框,它们都是带有windows文本框的现成自定义控件,因此将所有文本框切换到自定义控件需要大量的工作和测试。所以我有一个想法,制作一个小面板,Picturebox,随便什么,放在文本框上面。但它必须是透明的。操作系统是带有CF 2.0的Windows CE 5.0。

我是通过从PictureBox派生一个类并处理OnPaint来实现的。键是传递给DrawImage的ImageAttributes对象。我假设像素0,0是透明的颜色,但是你可以用不同的方式来处理

public partial class TransparentPictureBox : PictureBox
{
    private Color tColor;

    public TransparentPictureBox()
    {
        InitializeComponent();
    }

    public new Image Image
    {
        get { return base.Image; }
        set
        {
            if (value == base.Image)
                return;

            if (value != null)
            {
                Bitmap bmp = new Bitmap(value);
                tColor = bmp.GetPixel(0, 0);
                this.Width = value.Width;
                this.Height = value.Height;
            }
            base.Image = value;
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.Clear(this.BackColor);

        if (Image == null)
            return;

        ImageAttributes attr = new ImageAttributes();

        // Set the transparency color.
        attr.SetColorKey(tColor, tColor);

        Rectangle dstRect = new Rectangle(0, 0, base.Image.Width, base.Image.Height);
        e.Graphics.DrawImage(base.Image, dstRect, 0, 0, base.Image.Width, base.Image.Height, GraphicsUnit.Pixel, attr);
    }
}

根据您需要的透明度类型,您可以选择以下任一选项:

1.)如果图像的特定部分应该是完全透明的,可以使用设置单个透明颜色,然后将其传递给Graphics.DrawImage。您的图像需要有一种完全透明的颜色(例如color.Cyan)

2.)如果您希望整个图像部分透明,例如为了实现淡入/淡出效果,您可以p/调用该函数,如图所示

3.)如果您有内置透明度信息的图像,例如需要在各种背景色上渲染的透明PNG图像,则这些以前的方法将不起作用,您需要使用基于COM的界面。 .NETCF中的COM互操作记录在(搜索该页面上的“IImage接口”)

选项3是最灵活的,但它也涉及最多的实施工作。如果您继续提供有关希望透明绘制的图像类型和目标平台的更多信息,我们可能会提供更多帮助