- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在下面的代码中,无论何时调用 CreateCompatibleDC,生成的设备上下文只有两种颜色:黑色和白色。
case WM_PAINT:
{
PAINTSTRUCT ps;
ps.hdc=GetDC(g_CSkeletalViewerApp.m_hWnd);
ps.fErase=true;
RECT rc;
GetWindowRect(g_CSkeletalViewerApp.m_hWnd, &rc );
ps.rcPaint=rc;
int width = rc.right - rc.left;
int height = rc.bottom - rc.top;
HDC hdc=BeginPaint(hWnd,&ps);
HDC memdc=CreateCompatibleDC(hdc);
HBITMAP membm=CreateCompatibleBitmap(memdc,width,height);
SelectObject(memdc,membm);
for(int i=rc.left; i<rc.right; i++) {
for(int j=rc.top; j<rc.bottom; j++)
SetPixel(memdc,i,j,RGB((i+j)%255,(i+j)%255,(i+j)%255));
}
BitBlt(hdc,0,0,width,height,memdc,0,0,SRCCOPY);
DeleteDC(memdc);
EndPaint(hWnd,&ps);
}
break;
GetDeviceCaps(memdc,SIZEPALETTE) 返回 0。与 hdc 相同,因此我无法手动更改调色板。两个设备上下文的颜色深度都是 32 位。 GetLastError 在 CreateCompatibleDC 之后立即为 0。 GetNearestColor(memdc,RGB(any color)) 为黑色或白色。在任何设备上下文(不仅仅是 hdc)上调用 CreateCompatiobleDC 后,都会出现同样的问题。
有什么想法吗?
最佳答案
改变这个:
HBITMAP membm=CreateCompatibleBitmap(memdc,width,height);
对此:
HBITMAP membm=CreateCompatibleBitmap(hdc,width,height);
当您创建兼容的 DC 时,它是使用位图创建的——但该位图始终是 1x1 单色位图(即,黑色或白色的单个像素),无论它与哪种 DC 兼容。
因此,如果您创建与该 DC 兼容的位图,您将获得更大的单色位图。
但是,如果您创建了一个与原始 DC 兼容的位图,那么您将获得请求大小和原始DC 颜色深度的位图.
关于c++ - CreateCompatibleDC 的结果只有两种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56737791/
函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。 函数原型:HDC CreateCompatibleDC(HDC hdc); 参数: hdc:现有设备上下文环境的句柄,如果
在下面的代码中,无论何时调用 CreateCompatibleDC,生成的设备上下文只有两种颜色:黑色和白色。 case WM_PAINT: { PAINTST
此示例代码手动读取一个位图文件,使用 CreateDIBSection() 让 GDI 为其分配内存,并创建一个 hbitmap 句柄。然后它使用 MemoryDC 将位图绘制到窗口 DC: ftp:
在下面的代码中,无论何时调用 CreateCompatibleDC,生成的设备上下文只有两种颜色:黑色和白色。 case WM_PAINT: { PAINTST
也许这是个愚蠢的问题,我不明白为什么我无法在以下代码中创建 DC: HBITMAP COcrDlg::LoadClippedBitmap(LPCTSTR pathName,UINT maxWidth,
我正在使用 win32 制作 2D 动画。到目前为止,我的程序加载了一组从资源创建的 HBITMAP 对象。当在下面的代码中从“OnUpdate()”调用 CreateCompatibleDC() 时
我已经链接到 gdi32.lib。无奈之下,我还链接了两个不同版本的 gdi32.lib 以及 gdiplus.lib,并包含了我能找到的所有 gdi 头文件,但无济于事。然而,这个问题在额外链接之前
我有一个可视化 C++ 应用程序,它使用 CView 派生类来呈现其显示,主要是 3d vector 数据和真实类型文本。使用的映射模式是 MM_ANISOTROPIC 或 MM_LOMETRIC。我
我有一个类的以下代码。这是一个类的初始化。 第三方动态链接库 [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatib
当您调用 CreateCompatibleDC(NULL) 时,您将获得应用程序当前屏幕的句柄,如 MSDN 中所述: If this handle is NULL, the function cre
我是一名优秀的程序员,十分优秀!