4

CF2.0で画像を透明にする方法はありますか?テキストボックスの上に小さな画像を配置する必要がありますが、ユーザーがテキストを表示できるように透明にする必要があります。アイデアはありますか?

どうもありがとうございます

twickl

編集:

あなたの答えをありがとう、私はそれらのリンクをチェックします!私の投稿を完了するために、これが私がやろうとしていることです:

テキストボックスの右端にあるXである小さな画像(画像はまだ存在せず、istを作成する必要があるため、すべての形式で完全に開いています)を表示したいと思います。そのXをクリックすると、iPhoneのように、テキストボックス内のテキストが消去されます。しかし、プロジェクトに独自のコントロールを作成することはできません。これは、Windows TextBoxを備えたカスタムコントロールであるTextBoxが非常に多いため、すべてをカスタムコントロールに切り替えるには多くの作業とテストが必要になるためです。だから私は、テキストボックスの上にある小さなパネル、ピクチャーボックスなどを作るというアイデアを持っています。しかし、それは透明でなければなりません。OSは、CF2.0を搭載したWindowsCE5.0です。

4

2 に答える 2

8

必要な透明性の種類に応じて、次のオプションのいずれかを選択できます。

1.)完全に透明である必要がある特定の部分を持つ画像がある場合は、ImageAttributes.SetColorKey()を使用して単一の透明色を設定し、これをGraphics.DrawImageに渡すことができます。画像には、完全に透明に描画される1つの色(Color.Cyanなど)が必要です。

2.)フェードイン/フェードアウト効果など、画像全体を部分的に透明にしたい場合は、ここに示すように、 AlphaBlend()関数をP/呼び出しできます。

3.)さまざまな背景色でレンダリングする必要がある透明なPNG画像など、透明度情報が組み込まれた画像がある場合、これらの以前の方法は機能せず、COMベースのIImageインターフェイスを使用する必要があります。.NETCFからのCOM相互運用機能は、このページに記載されています(このページで「IImageインターフェイス」を検索してください)。

オプション3は最も柔軟性がありますが、実装作業も最も多くなります。透過的に描画したい画像の種類とターゲットプラットフォームに関する詳細情報をフォローアップすると、さらにサポートできる可能性があります。

于 2009-05-16T23:25:22.733 に答える
3

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);
    }
}
于 2009-05-16T21:47:17.307 に答える