gdi相关内容

绘制 8bpp 灰度位图(非托管 C++)

我一直试图在 8bpp 灰度位图上绘制但没有成功.这是我的一些尝试.也许有人可以指出我做错了什么. ================================================== 尝试 1:创建、选择和绘制: 在构造函数中: CBitmap bm;bm.CreateBitmap (200, 200, 1, 8, NULL); 在 OnDraw 中: C ..
发布时间:2022-01-06 12:01:29 C/C++开发

如何使用 GDI 通过像素强度将位图转换为灰度?

我正在寻找如何使用 GDI(而非 GDI+)将 32 位位图转换为灰度的简单解决方案.有没有可能,例如通过更改位图的调色板或其他什么? 当然,Delphi 中有很多例子,比如这个,但我正在寻找一个 WinAPI 函数,它可以在没有迭代的情况下执行此操作. 解决方案 我没有发现任何单个 GDI 函数执行此操作.正如大卫在评论中提到的,最简单的方法是扫描每一行并计算像素颜色.您正在寻找的 ..
发布时间:2022-01-06 11:53:40 其他开发

高效获取windows桌面截图

是否有比下面的代码更有效的方式来获取 Windows 桌面的副本(使用 GDI 或任何其他库) HDC dcDesktop;HDC dcMem;HBITMAP hbmpMem;HBITMAP hOriginal;位图 bmpDesktopCopy;dcDesktop = GetDC(GetDesktopWindow());dcMem = CreateCompatibleDC(dcDesktop) ..
发布时间:2022-01-06 11:34:19 C/C++开发

如何在 .NET 中使用大位图?

我正在尝试编写一个轻量级的图像查看应用程序.但是,.NET 存在系统内存限制. 尝试加载大型位图(9000 x 9000 像素 或更大,24 位)时,出现 System.OutOfMemoryException.这是在具有 2GB RAM(其中 1.3GB 已用完)的 Windows 2000 PC 上进行的.尝试加载文件也需要花费大量时间. 以下代码生成此错误: Image ima ..
发布时间:2022-01-06 11:31:39 C#/.NET

从内存缓冲区创建 HBITMAP

我有一个应用程序可以从数据库中加载一些 blob 数据,该数据库可以表示各种位图和图标的 png 格式或原始二进制数据.这被存储在 std::vector 我正在使用 CImageList 对象在树视图、工具栏图像等中显示各种图像,但问题是从内存中的数据创建位图变得模糊,好像在执行时缺少像素一样类似于以下内容: std::vector位;HBITMAP hbitmap = CreateBi ..
发布时间:2022-01-06 11:17:21 C/C++开发

GDI 在第二个线程中使用 TGIFImage 处理泄漏

我有一个后台线程加载图像(从磁盘或服务器),目标是最终将它们传递给主线程进行绘制.当第二个线程使用 VCL 的 TGIFImage 类加载 GIF 图像时,这个程序有时在线程中每次执行以下行时会泄漏几个句柄: m_poBitmap32->Assign(poGIFImage); 也就是说,刚打开的 GIF 图像正在分配给线程拥有的位图.这些都不与任何其他线程共享,即完全本地化到线程.它与时间有关 ..
发布时间:2021-12-31 08:06:55 其他开发

如何使用 GDI 将方形位图渲染为任意四边多边形?

我需要绘制一个正方形图像,映射或转换为编译时未知的四边多边形.我该怎么做? 详细解释 具体问题是使用非矩形地图投影渲染地图图块.假设我有以下磁贴: 而且我知道四个角点必须在这里: 鉴于此,我想得到以下输出: 方形图块可能是: 旋转;和/或 一端比另一端窄. 我认为第二项意味着这需要一个非仿射变换. 随机附加注释 四边形? 完全正确的说法是,瓷 ..
发布时间:2021-12-30 19:01:17 其他开发

SetPixel 太慢了.有没有更快的方法来绘制位图?

我有一个正在开发的小型绘画程序.我在位图上使用 SetPixel 来绘制线条.当画笔大小变大时,例如 25 像素,性能会明显下降.我想知道是否有更快的方法来绘制位图.以下是该项目的一些背景: 我正在使用位图,以便我可以使用图层,例如在 Photoshop 或 GIMP 中. 线是手动绘制的,因为这最终会使用绘图板压力来改变线的长度. 线条最终应沿边缘消除锯齿/平滑. 我将包含我的绘 ..
发布时间:2021-12-30 18:31:35 C#/.NET

如何找到我的 CreateFont 调用实际使用的字体?

在 Windows 中,CreateFontIndirect() 如果请求的字体没有被请求,调用可以默默地替换兼容的字体.GetObject() 调用不反映这种替换;它返回相同的 LOGFONT 传入.如何找到实际创建的字体?或者,如何强制 Windows 仅返回所请求的确切字体? 解决方案 在 Windows 中,如果请求的字体未被请求,则 CreateFontIndirect() ..
发布时间:2021-12-30 11:23:33 其他开发

Graphics.DrawString 与 TextRenderer.DrawText 哪个可以提供更好的质量

TextRenderer 基于 GDI,Graphics.DrawString 基于 GDI+.在图像上绘制文本时,这些函数中的哪一个可以提供更好的文本质量. 解决方案 我的 2 美分:我总是使用 Graphics.DrawString,除非当我需要为我的(Windows 窗体)进行自定义绘画时控件.例如,在设置了 OwnerDraw 的列表框中,如果我附加了一个完全绘制项目(包括项目文本 ..
发布时间:2021-12-22 19:41:31 C#/.NET

读取 JPEG 元数据(方向)时出现问题

我有一张用 iPhone 拍摄的 JPEG 图像.在我的台式电脑(Windows 照片查看器、Google Chrome 等)上,方向不正确. 我正在开发一个 ASP.NET MVC 3 Web 应用程序,我需要在其中上传照片(目前使用 plupload). 我有一些服务器端代码来处理图像,包括读取 EXIF 数据. 我尝试读取 EXIF 元数据中的 PropertyTagOri ..
发布时间:2021-12-18 10:52:03 C#/.NET

一劳永逸:如何在 Windows API 中获得完全透明的复选框、按钮、单选按钮等,而不是黑色背景?

首先,对不起,如果我在这里听起来很傲慢/粗鲁. 好的,所以现在每个人都遇到了这个问题(我希望);我只是没有在任何地方找到任何足够的答案.我们从 Common Controls 6 清单开始, case WM_CTLCOLORSTATIC:if (/* 窗口有 WS_EX_TRANSPARENT */) {SetBkMode((HDC) wParam, 透明);返回(LRESULT)GetS ..
发布时间:2021-12-18 08:16:22 其他开发

有没有比 GDI GetPixel() 更快的替代方法?

我在 .NET 应用程序中使用来自 gdi32.dll 的 GetPixel() 对屏幕上任意位置的像素颜色进行采样.它工作正常,但对我来说是一个主要的性能瓶颈. 有没有更快的方法? 解决方案 使用 Bitmap 的 LockBits() 方法可以快速访问像素.这将返回给您一个包含指向像素数据开头的指针的对象,您可以使用不安全的代码来访问内存. https://web.arch ..
发布时间:2021-12-18 00:11:02 C#/.NET

我将如何使用 Win32/GDI 加载 PNG 图像(如果可能,不使用 GDI+)?

是否可以使用 Win32 GDI 函数将文件中的 PNG 加载到 HBITMAP 中?如果没有,不使用外部库(如 libpng)的最轻量级解决方案是什么? 解决方案 您可以使用 Windows Imaging Component 加载 PNG 文件(在 Windows XP SP2 和更高版本上).请参阅 MSDN 杂志,了解如何使用 API一个 href="https://faithli ..
发布时间:2021-12-07 11:05:45 C/C++开发

从另一个 HBITMAP 复制位图

我正在尝试编写一个类来在我的程序中包装位图功能. 一个有用的功能是从另一个位图句柄复制位图.我有点卡住了: void operator=( MyBitmapType & bmp ){HDC dcMem;HDC 直流源;if( m_hBitmap != bmp.Handle() ){如果( m_hBitmap )this->DisposeOf();//从源位图复制位图头GetObject( ..
发布时间:2021-11-30 14:12:08 C/C++开发

使用类似于 Inspect 的 GDI+(或 GDI)在屏幕上绘图

我正在尝试使用 GDI+ 在屏幕上(整个屏幕,在所有其他窗口的顶部)进行绘制. 我已将 NULL 传递给 GetDC 以将 HDC 传送到屏幕,然后使用它创建一个 Graphics 对象,并使用 DrawRectangle 在屏幕上绘制矩形. 一切正常......除了......矩形的内部不会更新. 就像我在命令提示符上绘制它并移动命令提示符一样,矩形的内部仍然是黑色的.我希望看到矩形下 ..
发布时间:2021-11-15 00:55:19 C/C++开发

使 GDI 绘图不可点击

我有一个带有 GDI 绘图的透明 WinForms 应用程序(我将其用作叠加层).问题是,每当我单击 GDI 绘图时,焦点都会转到应用程序窗口.我该如何转? 解决方案 只要你正确地实现了覆盖(一个拥有的窗口显示为 Shown(owner) 重载,示例) 然后它只需要一点点复制/粘贴代码.Windows 会询问您单击了窗口的哪个部分,您可以回答“它是透明的".所以它会继续寻找任何感兴趣的人, ..
发布时间:2021-09-27 19:00:21 C#/.NET

为什么我要一次又一次地调用`GetDC`和`ReleaseDC`?

我看到的每个示例代码都是一次又一次地调用 GetDC 和 ReleaseDC.或者 BeginPaint 和 EndPaint. 但我认为在屏幕上绘图非常频繁(尤其是在游戏中),因此将绘图存储在内存中比一直获取和释放设备上下文要好. 所以我走的是获取 DC 并“保留它"的路线,只有在程序结束时才释放它.但为什么人们不这样做呢?是不是因为GetDC和ReleaseDC成本很低? cas ..
发布时间:2021-09-25 19:28:15 其他开发

如何使用 CreateFontA 设置字体大小?

我不习惯 CreateFontA,但我正在为使用此功能的游戏制作 mod,我也必须使用它. 我设法更改了字体,但在更改字体大小时遇到​​了一些麻烦. 我想使用 11px 的字体大小,我该如何实现?我尝试将宽度和高度设置为 11,但它出错了. 解决方案 答案是(或至少可以是)有点重要. 首先,您可以选择两种不同的高度:字符本身的高度,或“正常"字符所在的单元格的高度(但是, ..
发布时间:2021-09-25 19:26:48 C/C++开发

绘制鼠标光标

我正在尝试以 Win32 形式模拟鼠标光标.在我拥有的每个 WM_MOUSEMOVE 上 hCursor = LoadCursor(NULL, IDC_ARROW);////获取设备上下文hDeviceContext = GetDC(hwnd);hDCMem = CreateCompatibleDC(hDeviceContext);hBitmap = CreateCompatibleBitmap ..
发布时间:2021-09-25 19:10:43 其他开发