ab.com コミュニティ https://www.activebasic.com/forum/ |
|
画像表示したあとに全体を薄くしたりしたい場合 https://www.activebasic.com/forum/viewtopic.php?t=2602 |
ページ 1 / 1 |
作成者: | いとちゃん [ 2009年10月22日(木) 10:32 ] |
記事の件名: | 画像表示したあとに全体を薄くしたりしたい場合 |
日ごろは大変お世話になっております。 サーバー復旧おめでとうございます。さびしかったです。 さて、A,B,C,Dと画像がトランプのように重なって表示されていて Aがだんだん薄くなってB Bがだんだん薄くなってC というような表示をするプログラムを考えています。 描画にはけっこう時間がかかるようにも思いますがこうした RGBを段階的に薄くしていってダイレクトに表示するような 方法は具体的にどのようなファンクションで行なうのが良い のでしょうか。 達人皆様ご教示お願いいたします。 |
作成者: | konisi [ 2009年10月24日(土) 15:09 ] |
記事の件名: | |
AlphaBlend関数が使えるようです。 [ここをクリックすると内容が表示されます]
コード: Const AC_SRC_OVER=0 Const AC_SRC_ALPHA=1 Type BLENDFUNCTION BlendOp As Byte'ブレンド操作(常にAC_SRC_OVER) BlendFlags As Byte'常に0 SourceConstantAlpha As Byte'コピー元のビットマップ全体に適用するアルファ値 AlphaFormat As Byte'コピー元のビットマップがアルファ値を持つときAC_SRC_ALPHA End Type TypeDef _BLENDFUNCTION=DWord 'AB423でコンパイルできる事は確認したけど、関数のオーバーロードが出来るようになったのっていつだっけ? Function Get_BLENDFUNCTION(ByRef bf As BLENDFUNCTION) As _BLENDFUNCTION Get_BLENDFUNCTION=GetDWord(VarPtr(bf)) End Function Function Get_BLENDFUNCTION(bf As *BLENDFUNCTION) As _BLENDFUNCTION Get_BLENDFUNCTION=GetDWord(bf) End Function Declare Function AlphaBlend Lib "msimg32.dll" (_ hdcDest As HDC,nXOriginDest As DWord,nYOriginDest As DWord,nWidthDest As DWord,hHeightDest As DWord,_ hdcSrc As HDC,nXOriginSrc As DWord,nYOriginSrc As DWord,nWidthSrc As DWord,nHeightSrc As DWord,_ blendFunction As _BLENDFUNCTION) As Long '定義ここまで #prompt Line (0,0)-Step(100,100),4,bf Line (110,0)-Step(100,100),2,bf Dim hDC As HDC,bf As BLENDFUNCTION hDC=GetDC(_PromptSys_hWnd) bf.BlendOp=AC_SRC_OVER bf.BlendFlags=0 bf.AlphaFormat=0 bf.SourceConstantAlpha=255 AlphaBlend(hDC,220,0,100,100,hDC,0,0,100,100,Get_BLENDFUNCTION(bf)) bf.SourceConstantAlpha=128 AlphaBlend(hDC,220,0,100,100,hDC,110,0,100,100,Get_BLENDFUNCTION(bf)) ReleaseDC(_PromptSys_hWnd,hDC) |
作成者: | いとちゃん [ 2009年10月26日(月) 08:40 ] |
記事の件名: | 画像を薄くしていくBLEND |
なるほど良く分かりました。 しかし、BLENDの関数内の設定が良く分からないのですが やはりこの数値の設定はRGB別々に行なうようでしょうか。 下記のプログラム変更で確認してみましたが変化させているのは Bのみと思っています。RGBを同時に低減させて黒くしたりすることで BLENDの機能が実現できそうです。 コード: Const AC_SRC_OVER=0 Const AC_SRC_ALPHA=1 Type BLENDFUNCTION BlendOp As Byte'ブレンド操作(常にAC_SRC_OVER) BlendFlags As Byte'常に0 SourceConstantAlpha As Byte'コピー元のビットマップ全体に適用するアルファ値 AlphaFormat As Byte'コピー元のビットマップがアルファ値を持つときAC_SRC_ALPHA End Type TypeDef _BLENDFUNCTION=DWord 'AB423でコンパイルできる事は確認したけど、関数のオーバーロードが出来るようになったのっていつだっけ? Function Get_BLENDFUNCTION(ByRef bf As BLENDFUNCTION) As _BLENDFUNCTION Get_BLENDFUNCTION=GetDWord(VarPtr(bf)) End Function Function Get_BLENDFUNCTION(bf As *BLENDFUNCTION) As _BLENDFUNCTION Get_BLENDFUNCTION=GetDWord(bf) End Function Declare Function AlphaBlend Lib "msimg32.dll" (_ hdcDest As HDC,nXOriginDest As DWord,nYOriginDest As DWord,nWidthDest As DWord,hHeightDest As DWord,_ hdcSrc As HDC,nXOriginSrc As DWord,nYOriginSrc As DWord,nWidthSrc As DWord,nHeightSrc As DWord,_ blendFunction As _BLENDFUNCTION) As Long '定義ここまで #prompt Line (0,0)-Step(100,100),4,bf Line (110,0)-Step(100,100),2,bf Dim hDC As HDC,bf As BLENDFUNCTION Dim i as Long,t as Long hDC=GetDC(_PromptSys_hWnd) bf.BlendOp=AC_SRC_OVER bf.BlendFlags=0 bf.AlphaFormat=0 bf.SourceConstantAlpha=255 AlphaBlend(hDC,220,0,100,100,hDC,0,0,100,100,Get_BLENDFUNCTION(bf)) for i=1 to 128 bf.SourceConstantAlpha=i AlphaBlend(hDC,220,0,100,100,hDC,110,0,100,100,Get_BLENDFUNCTION(bf)) for t=1 to 10000000:Next t Next i ReleaseDC(_PromptSys_hWnd,hDC) |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |