2

フル.NETフレームワークでは、Color.FromArgb()メソッドを使用して、次のようにアルファブレンディングで新しい色を作成できます。

Color blended = Color.FromArgb(alpha, color);

また

Color blended = Color.FromArgb(alpha, red, green , blue);

ただし、Compact Framework(具体的には2.0)では、これらのメソッドはどちらも使用できず、次のものしか得られません。

Color.FromArgb(int red, int green, int blue);

Color.FromArgb(int val);

前者は明らかにアルファ値を入力することさえできませんが、後者のドキュメントは「val」が32ビットARGB値(標準の24ビット0xRRGGBBではなく0xAARRGGBBとして)であることを示しているので、それは理にかなっていますARGB値を作成し、それを関数に渡すことができます。私はこれを次のように試しました:

private Color FromARGB(byte alpha, byte red, byte green, byte blue)
{
    int val = (alpha << 24) | (red << 16) | (green << 8) | blue;
    return Color.FromArgb(val);
}

しかし、私が何をしても、アルファブレンディングは機能せず、アルファ値を0に設定した場合でも、結果の色は常に完全な不透明度になります。

誰かがこれをCompactFrameworkで動作させるようになりましたか?

4

5 に答える 5

1

どうやら、それはそれほど単純ではありませんが、Windows Mobile 5.0以降を使用している場合は、それでも可能です。

于 2008-08-18T12:33:02.273 に答える
1

com 相互運用の面倒な作業を行っていると思われるコードプレックス サイトがあります。

于 2008-10-13T23:03:20.513 に答える
0

CE6.0はアルファブレンディングをサポートしていません。WM 5.0以降では機能しますが、.NET CFを使用しない場合は、GDIをP/Invokeする必要があります。そこには既製の解決策がありますが、興味があれば、明日オフィスでリンクを掘り下げることができます。私は現在CE6.0で作業する必要があるので、それらを頭に入れていません。

CE 6.0を使用している場合は、透明度の背景色(ff00ffなど)を予約し、それを画像の透明部分に使用することで、疑似透明度を使用できます。次に、親コントロールは、娘コントロールのグラフィックバッファに関連する部分を再描画できるようにする単純なインターフェイスを実装する必要があります。これにより、真の「アルファチャネル」が得られるのではなく、ハードオンオフのバイナリの種類の透明性が得られることに注意してください。

思ったほど悪くはありません。初心者向けのOpenNETCFImageButtonをご覧ください。この方法を使用する場合は、興味があれば、この手法を使用したいくつかの単純なコントロールの拡張バージョンがあります。

もう1つの欠点は、この手法が特別なインターフェイスを実装する親コントロールに依存していることと、描画でそれを使用するdaugtherコントロールに依存していることです。したがって、クローズドソースコンポーネント(つまり、ストックのWinFormsコンポーネント)を使用すると、運が悪くなります。

于 2012-06-18T22:03:05.387 に答える
0

私はこのコードを取り、これを追加します

device.RenderState.AlphaBlendEnable = true;
device.RenderState.AlphaFunction = Compare.Greater;
device.RenderState.AlphaTestEnable = true;
device.RenderState.DestinationBlend = Blend.InvSourceAlpha;
device.RenderState.SourceBlend = Blend.SourceAlpha;
device.RenderState.DiffuseMaterialSource = ColorSource.Material;

初期化されたルーチンで、それは非常にうまく機能します、ありがとう

于 2010-05-20T00:36:49.717 に答える
0

どうやら、それはそれほど単純ではありませんが、Windows Mobile 5.0以降を使用している場合は、それでも可能です。

うわー...私がそのすべてのコードを入れなければならない場合(そしてネイティブの相互運用を行う必要がある場合)は間違いなく価値がありませんが、リンクに感謝します。

于 2008-08-18T12:37:45.557 に答える