いつもありがとうございます。
すみません、お願いしている立場で大変恐縮ではありますが
少し思っていた動作と違うようです。
それで、テストプログラムのようなものを書いてみました。
@「もしscに透明部分があった場合は、scとimの両方の透明部分を生かす感じ」を想定していたのですが
下のプログラムを起動していただくと分かるとおり、imの透明部分だけが生かされてしまっているようで
scの透明部分かつimの不透明部分が真っ黒として表示されてしまっています。
Aいまだに私が無能すぎて理解不能な部分ですが、たぶん乗算済みアルファが考慮されていないようで
imのアルファ値の度合いに見合わない濃さでscが描画されてしまっているようです。
すみません、私のチェック方法が間違っていたらごめんなさいm(__)m
ご確認いただけるとありがたいですm(__)m
よろしくお願いいたしますm(__)m
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;
DxLib_Init();
SetUsePremulAlphaConvertLoad(1);
//アルファ値にグラデーションのあるimを作る
int im=MakeScreen(400,400,1);
SetDrawScreen(im);ClearDrawScreen();
for(int i=1;i<=10;i++){SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA,(int)(255*(i/10.0)));DrawBox(30*i,0,30*i+30,300,GetColor(255,255,255),1);}
//アルファ値にグラデーションのあるscを作る
int sc=MakeScreen(400,400,1);
SetDrawScreen(sc);ClearDrawScreen();
for(int i=1;i<=5;i++){SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA,(int)(255*(i/5.0)));DrawBox(0,60*i,300,60*i+60,GetColor(255,0,0),1);}
//scにDX_BLENDMODE_DST_RGB_SRC_Aでアルファ値だけ貼り付け
SetDrawBlendMode(DX_BLENDMODE_DST_RGB_SRC_A,255);
DrawGraph(0,0,im,1);
//DX_SCREEN_BACKに戻す
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA,255);
SetDrawScreen(DX_SCREEN_BACK);
while( ProcessMessage() == 0 )
{
ClearDrawScreen();
DrawBox(0,0,1000,1000,GetColor(0,0,100),1);
DrawGraph(0,0,sc,1);
ScreenFlip();
}
DxLib_End() ;
return 0 ;
}