草庐IT

c++ - 如何使用 GDI+ 和 C++ 从 SQL Server 数据库加载和保存图像?

我需要特别加载保存为blob的JPG图像。GDI+使得从文件而不是数据库中检索图像变得非常容易... 最佳答案 看看Image::Image(IStream*,BOOL).这需要一个指向实现IStream接口(interface)的COM对象的指针。您可以通过使用GlobalAlloc分配一些全局内存来获得其中之一。然后调用CreateStreamOnHGlobal在返回的句柄上。它看起来像这样:shared_ptrCreateImage(BYTE*blob,size_tblobSize){HGLOBALhMem=::GlobalA

c++ - GDI+ 双缓冲

我已经成功地使用GDI实现了双缓冲,但没有使用GDI+。我想在不闪烁的情况下显示png图像。此外,在某些时候我还想使用GDI+实现png图像的动画,因此必须知道如何使用GDI+进行双缓冲。我已经设法通过ISTREAM将png图像放入Image对象中:这是我的代码的一部分,可以帮助您了解我遇到问题的地方:memmove(pBlock,pImage,size);CreateStreamOnHGlobal(hBlock,FALSE,&pStream);Graphicsgraphics(memDC);Imageimage(pStream);intimage_width;intimage_hei

c++ - MFC 绘制的元素在 30-60 分钟后发生变化

我有一个带有完全自定义绘制UI的应用程序(即只是一堆带有文本的填充框)。大约运行30-60分钟后,UI元素会自发发生变化。例如,白线(框边框)消失,文本调整大小等。我已经链接到其中一个屏幕的一些前后图像。这表明所有的白线都消失了。其他屏幕显示文本大小发生显着变化。之前:http://s21.postimg.org/cogqodson/BEFORE.png之后:http://s24.postimg.org/7skx21sid/AFTER.png此项目是使用MFC在MSVisualC++2010中编写的,并在Windows7Pro上运行。这是我的OnPaint()代码:voidCMainW

c++ - 全屏写意

我正在尝试制作一个简单的小工具,允许用户从正常操作切换到禁用所有应用程序消息的模式,他们可以使用鼠标进行一些徒手绘图,然后再次切换模式以保持他们在屏幕上画画,同时做任何其他他们想做的正常事情。如果我决定,这可以演变成一件好事,您可以通过保存您所做的装饰并在以后加载它们来使用装饰屏幕。当我开始这个时(半年多以前,在发现WindowsAPI后不久)我只是进行全局鼠标跟踪并在GetDC(NULL)hdc的任何地方画一个圆圈。当然,问题是当它下面的任何东西更新时它会消失并且仍然会有鼠标消息通过,所以如果我按住桌面上的按钮,例如,它会在整个绘画中放置调整大小的矩形东西。今天,自从6个月前的最后一

c++ - 如何将 GDI 8-bpp 索引位图转换为 RGB 位图?

我正在尝试将8-bpp索引位图转换为RGB位图,但我没有成功。第一个问题是GetPalette()返回的调色板不包含256个唯一数字。到目前为止,这是我的代码:BitmapDatabitmapData;intpaletteSize=b->GetPaletteSize();ColorPalettecolorPalette;b->GetPalette(&colorPalette,paletteSize/4);b->LockBits(newGdiplus::Rect(0,0,b->GetWidth(),b->GetHeight()),0,b->GetPixelFormat(),&bitmap

c++ - 获取准确的窗口区域大小 - CreateWindow 窗口大小不是正确的窗口大小

在尝试用C++创建窗口并绘制窗口大小与我设置的大小不匹配的矩形时,我注意到一些非常烦人的事情。例如,如果我设置480x240窗口并尝试通过获取GetWindowRect(hwnd,&rect)从上到下、从左到右绘制矩形并计算宽度和高度:rectangle_width=(rect.right-rect.left)/amountRectangleX;rectangle_height=(rect.bottom-rect.top)/amountRectangleY;如果amountRectangleX=2且Y=2,它会绘制4个矩形,但宽度和高度“关闭”,因此它不会填满整个屏幕或在其上呈现。发生

c++ - 屏幕捕获无法使用 C++ 和 GDI 捕获整个屏幕

我通过网络进行了一些研究,找到了一些有用的代码。我稍微改变了它,试图捕获整个屏幕并生成一个缓冲区,我可以通过udp数据包发送它:#include#include#includevoidCapruteScreenAndSaveToFile(){uint16_tBitsPerPixel=24;uint32_tWidth=GetSystemMetrics(SM_CXSCREEN);uint32_tHeight=GetSystemMetrics(SM_CYSCREEN);//CreateHeaderBITMAPFILEHEADERHeader;memset(&Header,0,sizeof(H

c++ - 从内存中获取 jpeg 的大小(使用 GDI++ 转换)

这是我在这里的第一篇文章。我有个问题。我需要拍摄桌面截图,将其转换为jpeg,将其存储在缓冲区中,然后对其进行处理并通过Internet发送。我已经编写了使用GetDC执行此操作的代码……以及用于将HBITMAP转换为jpeg的GDI+。我现在遇到的问题是我不知道保存到IStream中的jpeg的大小。这是将HBITMAPhBackBitmap引用的位图转换为jpeg并将其保存到pStream的部分代码。我需要知道有多少字节已写入pStream以及如何使用pStream(获取PVOID句柄):Gdiplus::Bitmapbitmap(hBackBitmap,NULL);///load

c++ - 获取字距调整信息

如何获取GDI的字距调整信息,然后在GetKerningPairs中使用?documentation指出Thenumberofpairsinthelpkrnpairarray.IfthefonthasmorethannNumPairskerningpairs,thefunctionreturnsanerror.但是,我不知道要传入多少对,也没有找到查询它的方法。编辑#2这是我也尝试过的填充应用程序,它总是为任何字体的对数生成0。GetLastError也将始终返回0。#include#include#includeusingnamespacestd;usingnamespaceGdip

c++ - 如何将 GDI+ 的图像* 转换为位图*

我正在用c++、gdi+编写代码。我使用Image的GetThumbnail()方法来获取缩略图。但是,我需要将其转换为HBITMAP。我知道下面的代码可以得到GetHBITMAP:Bitmap*img;HBITMAPtemp;Colorcolor;img->GetHBITMAP(color,&temp);//ifimgisBitmap*thisworkswell。但是如何快速将Image*转换为Bitmap*呢?非常感谢!实际上,现在我必须使用以下方法:intwidth=sourceImg->GetWidth();//sourceImgisImage*intheight=source