ATL:OnDrawThumbnailhDrawDCseemstobemonochromeinIThumbnailProvider
创始人
2024-09-21 15:02:20
0

这个问题的原因在于在 IThumbnailProvider 的 OnDrawThumbnail 函数中,提供的 hDrawDC(绘制缩略图的设备上下文)似乎是单色的。这会导致缩略图无法正确地绘制。

解决方法是使用 BitBlt 函数将 hDrawDC 复制到一个新的设备上下文中。这个新的设备上下文应该具有正确的颜色深度,以便正确地绘制缩略图。以下是示例代码:

HRESULT OnDrawThumbnail(UINT cx, UINT cy, __out HBITMAP* phbmp)
{
    // Get the source bitmap.
    HBITMAP hSourceBitmap = GetSourceBitmap(cx, cy);
    if (!hSourceBitmap)
    {
        return E_FAIL;
    }
    
    // Create a destination bitmap with the desired color depth.
    HDC hDC = GetDC(NULL);
    HDC hDestDC = CreateCompatibleDC(hDC);
    BITMAPINFO bmi = { 0 };
    bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmi.bmiHeader.biWidth = cx;
    bmi.bmiHeader.biHeight = -cy;  // Negative height indicates a top-down bitmap.
    bmi.bmiHeader.biPlanes = 1;
    bmi.bmiHeader.biBitCount = 24;  // 24-bit color depth.
    bmi.bmiHeader.biCompression = BI_RGB;
    HBITMAP hDestBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
    ReleaseDC(NULL, hDC);
    
    // Draw the source bitmap onto the destination bitmap.
    HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDestDC, hDestBitmap);
    HDC hSourceDC = CreateCompatibleDC(hDestDC);
    HBITMAP hOldSourceBitmap = (HBITMAP)SelectObject(hSourceDC, hSourceBitmap);
    BitBlt(hDestDC, 0, 0, cx, cy, hSourceDC, 0,

相关内容

热门资讯

安装apache-beam==... 出现此错误可能是因为用户的Python版本太低,而apache-beam==2.34.0需要更高的P...
避免在粘贴双引号时向VS 20... 在粘贴双引号时向VS 2022添加反斜杠的问题通常是由于编辑器的自动转义功能引起的。为了避免这个问题...
Android Recycle... 要在Android RecyclerView中实现滑动卡片效果,可以按照以下步骤进行操作:首先,在项...
omi系统和安卓系统哪个好,揭... OMI系统和安卓系统哪个好?这个问题就像是在问“苹果和橘子哪个更甜”,每个人都有自己的答案。今天,我...
原生ios和安卓系统,原生对比... 亲爱的读者们,你是否曾好奇过,为什么你的iPhone和安卓手机在操作体验上有着天壤之别?今天,就让我...
Android - 无法确定任... 这个错误通常发生在Android项目中,表示编译Debug版本的Java代码时出现了依赖关系问题。下...
Android - NDK 预... 在Android NDK的构建过程中,LOCAL_SRC_FILES只能包含一个项目。如果需要在ND...
Akka生成Actor问题 在Akka框架中,可以使用ActorSystem对象生成Actor。但是,当我们在Actor类中尝试...
Agora-RTC-React... 出现这个错误原因是因为在 React 组件中使用,import AgoraRTC from “ago...
Alertmanager在pr... 首先,在Prometheus配置文件中,确保Alertmanager URL已正确配置。例如:ale...