Re: バグ報告スレッド 11 Ver2.20ベータ公開中 [ No.433 ] | |
|
2016/12/02 19:31 ピッコロ |
自分が持っているソフトで画像を透過できなかったソフトです。
Photoshop 7.0
AzPainter2 2.12
で確認できました。
自作ソフトのソースを確認したところ、32bitDCではなく、 32bitイメージを作成してそこに読み込んでいるようでした。
8bit と それより大きいbit数のイメージにしか対応していないので 次のようになっています。
イメージ作成部分 CImageEX は CImageを継承しています。 CImageのアルファーブレンドは、あまりにもお粗末なので その部分だけ改造したものです。 直接SDKを使っている場合は、CImageのソースファイルを参照 してください。
BOOL CLayer::CreateImg( CSize size, const RGBQUAD* pPaletts, BOOL flgCpy, int nBit ) { CImageEx* pImg = new CImageEx; if ( pImg == NULL ) return FALSE; if ( nBit == 8 ) { pImg->Create( size.cx, size.cy, 8 ); pImg->SetColorTable( 0, 64, pPaletts ); int idxPlt = 64 + m_nID*16; pImg->SetColorTable( idxPlt, 16, pPaletts + idxPlt ); pImg->SetTransparentColor( 0 ); } else { pImg->Create( size.cx, size.cy, 32, CImage::createAlphaChannel );
}
if ( m_pImg ) { if ( flgCpy ) { HDC dc = pImg->GetDC(); if ( dc ) { int w = size.cx; int h = size.cy; if ( m_pImg->GetWidth() < w ) w = m_pImg->GetWidth(); if ( m_pImg->GetHeight() < h ) h = m_pImg->GetHeight(); if ( m_nBit == nBit ) { BOOL flg = m_pImg->BitBlt( dc, 0, 0, w, h, 0, 0 ); } else { ::Img8to32( m_pImg, pImg, pPaletts, 0, 0, w, h ); } pImg->ReleaseDC(); } } DeleteImg(); } m_nBit = nBit; m_pImg = pImg; if ( m_nBit == 8 ) { SetPalette( pPaletts ); }
return TRUE; }
以下が読み込んだ部分です。
CImageEx img; if ( img.Load(m_layers[id].m_strFilePath) != 0 ) { AfxMessageBox( _T("イメージの読み込みに失敗しました。") ); return FALSE; }
|
|