用D2D加载的gif文件很多都会出现错误的透明像素,请问怎么回事?

solomonlxd 2022-05-16 17:23:27

用D2D加载出来的Gif,其中那些大量灰色点都是渲染位图的背景色,绘制gif时由于错误的透明像素被显示出来了,正常gif在下面

 

 

主要代码:

        int CS4D2dAssist::LoadBitmapsFromFile(ID2D1RenderTarget * pRT, vector<CComPtr<ID2D1Bitmap>>& vBitmaps, LPCTSTR szFile)
        {
            vBitmaps.clear();

            CString strFile = szFile;
            if (!GetFullPathName(strFile))
                return 0;

            HRESULT hr = S_OK;

            CComPtr<IWICBitmapDecoder> pDecoder = NULL;

            hr = m_pWicFactory->CreateDecoderFromFilename(strFile, NULL, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &pDecoder);  //使用WICDecodeMetadataCacheOnLoad发现有jpeg文件创建decoder失败

            return GetBitmapsFromDecoder(pRT, pDecoder, vBitmaps);
        }
 

        int CS4D2dAssist::GetBitmapsFromDecoder(ID2D1RenderTarget *pRT, CComPtr<IWICBitmapDecoder> &pDecoder, vector<CComPtr<ID2D1Bitmap>> &vBitmaps)
        {
            HRESULT hr;
            UINT nCount;
            hr = pDecoder->GetFrameCount(&nCount);

            for (int i = 0; i < nCount; i++)
            {
                CComPtr<IWICBitmapFrameDecode> pSource = NULL;
                CComPtr<IWICFormatConverter> pConverter = NULL;
                CComPtr<IWICBitmapScaler> pScaler = NULL;

                hr = pDecoder->GetFrame(i, &pSource);
                hr = m_pWicFactory->CreateFormatConverter(&pConverter);
                hr = pConverter->Initialize(pSource, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.f, WICBitmapPaletteTypeMedianCut);

                // Create a Direct2D bitmap from the WIC bitmap.
                CComPtr < ID2D1Bitmap> pBitmap;
                hr = pRT->CreateBitmapFromWicBitmap(pConverter, &pBitmap);
                vBitmaps.push_back(pBitmap);
            }

            return vBitmaps.size();
        }
 

...全文
261 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
solomonlxd 05-17
  • 打赏
  • 举报
回复

该问题已解决,gif需要通过meta读取全局尺寸,背景色和每一帧的位置以及绘制方式,然后按正确方式和位置绘制

相关推荐
发帖
界面

1.5w+

社区成员

VC/MFC 界面
社区管理员
  • 界面
加入社区
帖子事件
编辑了帖子 (查看)
2022-05-16 17:44
编辑了帖子 (查看)
2022-05-16 17:30
编辑了帖子 (查看)
2022-05-16 17:25
创建了帖子
2022-05-16 17:23
社区公告
暂无公告