Search
Categories
Articles
Rainmeter関連
ファイル置き場
お知り合いなど

スポンサーサイト

--.--.-- | スポンサー広告

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Rainmeter-dev] Imageに透明度指定を入れてみる

2009.09.01 | Rainmeter-dev // その他

0 Comments

Rainmeterは透過pngに対応しているので、もし画像を表示する際に透過効果を持たせたければ、あらかじめ透過pngとしてファイルを作っておく必要があります。
ですが、jpg画像を使いたいときや、オリジナルファイルをいじりたくないときもあります。DynamicVariablesで文字色やその透明度が動的に変えられるようになったのもあって、画像描画時の透明度も同じように替えられてもいいんじゃないかと思い、試しにコードを書いてみました。

設定としてAlphaValueを追加し、値には0(透明)~255(不透明)を指定します。

    m_AlphaValue = parser.ReadInt(section, L"AlphaValue", 255);
    m_AlphaValue = min(255, m_AlphaValue);
    m_AlphaValue = max(0, m_AlphaValue);

255が指定されているときは今まで通りに描画し、それ以外ではColorMatrixを使って透明度を反映させます。

        if (m_AlphaValue == 255)
        {
            graphics.DrawImage(m_Bitmap, r, 0, 0, imageW, imageH, UnitPixel);
        }
        else
        {
            REAL alp = m_AlphaValue / 255.0f;
 
            // Initialize the color matrix
            ColorMatrix colorMatrix = { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
                                        0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
                                        0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
                                        0.0f, 0.0f, 0.0f, alp,  0.0f,
                                        0.0f, 0.0f, 0.0f, 0.0f, 1.0f };
 
            // Create an ImageAttributes object and set its color matrix
            ImageAttributes imageAtt;
            imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap);
 
            // Draw the semitransparent bitmap image
            graphics.DrawImage(m_Bitmap, r, 0, 0, imageW, imageH, UnitPixel, &imageAtt);
        }

ColorMatrixの5x5のうち、縦横それぞれの4番目が透明度に対応します(赤字の部分)。取る範囲は0.0-1.0なので、0-255から変換して指定します。
あとはそのColorMatrixをImageAttributesに設定して、DrawImage関数の引数に加えるだけです。MeterBitmapでも同じようにできそうです。

やはり実行時に透明度処理をするので、若干CPU使用率は上がってしまいますが、どうしても実行時に反映させたいという用途にはいいのかなと。
本来ならばDynamicVariablesでの透明度更新も含めてフェードアニメーションに使うようなものかもしれないけど、Rainmeterは仕組み上(表示にGDI+を使っているのも含め)アニメーションに弱いので、使いづらいものではあるんですが……。

« [GDI+] InterpolationModeをいじる [Rainmeter-dev] 画像のアスペクト比維持 ほか »

- Comments
0 Comments

管理者にだけ表示を許可する
- Trackbacks
0 Trackbacks


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。