| 
| |  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;
 }
 
 |  |