Articles of 位图

Windows成像组件 – Direct2D C ++ – 绘图,保存

使用Windows映像组件(WIC),我想为我的Windows桌面应用程序(Direct2D / C ++与Windows 7 SP1 – Visual Studio 2013) select任何types的RenderTarget(Direct2D Hwnd / Bitmap / WICBitmap – 等)进行绘制 创build一个空的位图(D2D1Bitmap或IWICBitmap – 无论哪个适用) 开始绘制 – 填充颜色,绘制一些线条和椭圆 – 结束绘制==>(全部在位图中) 在某些时候,我需要将绘制的内容保存在位图中作为我的电脑中的图像 将位图放在渲染目标的x1,y1(左上angular的xy坐标)和x2,y2(右下angular的xy坐标)中。 因为窗口的其余部分将被工具栏使用。 我如何使用C ++ / Direct2D来实现这一目标? GDI +我的function代码: Bitmap* pBmp = NULL; //create null or empty bitmap Graphics* pGrBuf = NULL; //initialise graphics to null pBmp = new […]

复制另一个HBITMAP的位图

我想写一个类来包装位图function在我的程序中。 一个有用的function是从另一个位图句柄复制位图。 我有点卡住了: void operator=( MyBitmapType & bmp ) { HDC dcMem; HDC dcSource; if( m_hBitmap != bmp.Handle() ) { if( m_hBitmap ) this->DisposeOf(); // copy the bitmap header from the source bitmap GetObject( bmp.Handle(), sizeof(BITMAP), (LPVOID)&m_bmpHeader ); // Create a compatible bitmap dcMem = CreateCompatibleDC( NULL ); m_hBitmap = CreateCompatibleBitmap( dcMem, m_bmpHeader.bmWidth, m_bmpHeader.bmHeight ); […]

如何从Windows剪贴板中读取位图

我正在编写一个非常小的C ++程序来帮助我制作animation精灵。 我希望它能够将数据从photoshop复制到剪贴板,在我的程序中进行操作,然后用转换覆盖剪贴板。 但问题是,我不知道如何从Photoshop中读取初始剪贴板。 我可以加载剪贴板与GetClipboardData(CF_DIB) ,并得到一个有效的句柄,但我不知道如何使用该句柄。 我已经尝试过使用SFML的Image::LoadFromMemory(handle, GlobalSize(handle)) ,它能够从内存中加载位图文件,但似乎没有工作。 我需要真正parsing整个格式吗? 在这种情况下,我会考虑什么格式的结构? 那么可能有什么办法可以快速修改数据,使其看起来像位图文件? 使用Windows API将其保存到文件可能更容易吗? (我可以用SFML加载这个文件来编辑,那样) 这只是一个快速而肮脏的工具,可以帮助我们在Photoshop中节省大量的工作量,因此效率或稳健性并不重要。

如何获取窗口的位图对象在C + +的屏幕截图?

如何获取窗口的位图对象在C + +的屏幕截图? 假设我已经有窗口句柄了。 而且我也想知道当它处于最小化状态时是否可以获得窗口的屏幕截图 ? 这里的C ++是指所有与Windows XP +(win32)相关的库的VC ++。

Gdiplus :: Bitmap :: FromHICON是否正确处理“黑白图标”?

如MSDN ICONINFO中所述 ,根据结构是否定义黑白图标, hbmMask和hbmColor的格式不同。 hbmMask types:HBITMAP 图标位掩码位图。 如果此结构定义了黑白图标,则此位掩码将被格式化,以使上半部分为图标AND位掩码,下半部分为图标XOR位掩码。 在这种情况下, 高度应该是两倍的偶数 。 如果这个结构定义了一个颜色图标,这个掩码只定义了图标的AND位掩码。 这意味着我们需要检测hbmColor的存在来正确计算图标的高度。 但是,后来我注意到Gdiplus::Bitmap::FromHICON() ,它接受HICON并将其转换为Gdiplus::Bitmap 。 由于我没有看到有关GDI +中“黑白”图标的任何材料,这种方法是否在内部处理这种情况? (不幸的是,我没有一个方便的testing图标,我也不知道如何创build一个正确的testing用例。)

Win32 C / C ++从内存缓冲区加载映像

我想在Win32应用程序中加载一个图像(.bmp)文件,但是我不想从Windows API使用标准的LoadBitmap / LoadImage:我想从已经在内存中的缓冲区加载它。 我可以直接从文件中直接加载位图并将其打印在屏幕上,但是这个问题让我陷入困境。 我正在寻找的是一个这样的function: HBITMAP LoadBitmapFromBuffer(char* buffer, int width, int height);

只使用GDI()保留图像的红色通道

我最初有一个彩色图像,我通过只复制红色通道,即RGB的前8位(24位),使其灰度。 这是因为一些处理需要图像灰度。处理后,我必须在屏幕上使用GDI显示此图像。 所以我必须把灰色值复制到最终输出的红色chanel。 像setpixel(i,j,RGB(grayvalue,0,0))。 我如何实现这个使用GDI?

高效地获取Windows桌面的屏幕截图

有没有比下面的代码更有效的方式获得Windows桌面(使用GDI或任何其他库)的副本 HDC dcDesktop; HDC dcMem; HBITMAP hbmpMem; HBITMAP hOriginal; BITMAP bmpDesktopCopy; dcDesktop = GetDC( GetDesktopWindow() ); dcMem = CreateCompatibleDC( dcDesktop ); hbmpMem = CreateCompatibleBitmap( dcMem, m_lWidth, m_lHeight ); BitBlt( dcMem, 0, 0, m_lWidth, m_lHeight, dcDesktop, 0, 0, SRCCOPY ); // Copy the hbmpMem to the desktop copy GetObject(hbmpMem, sizeof(BITMAP), (LPSTR)&bmpDesktopCopy);

将BMP加载到OpenGL纹理切换红色和蓝色的颜色。 (C ++ /视窗)

我试图加载一个OpenGL纹理的位图并将其显示到屏幕上,但是当我这样做时,红色和蓝色值似乎切换(例如:蓝色图像显示为橙色,绿色图像保持不变等。 )。 这个问题只存在加载位图时,我可以加载.png相对无错。 这是我用来加载位图和设置纹理的代码。 我正在使用DevIl,但是我不确定这是多么的相关,因为当我使用一个不同的系统(我不记得是什么,这是window.h中的一个函数,我相信)存在问题: ilOriginFunc(IL_ORIGIN_LOWER_LEFT); ilEnable(IL_ORIGIN_SET); ILuint image; ilGenImages(1, &image); ilBindImage(image); ilLoad(IL_BMP, "Data/NeHe.bmp"); // Incidentally, loading a png, although it fixes the problem, // rotates the image 180 degrees. Not sure if that's important or not, // But it's why I added the first line of code glGenTextures(3, &_texture[0]); glBindTexture(GL_TEXTURE_2D, _texture[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); […]

BITMAPINFO结构的bmiColors字段

BITMAPINFO结构具有以下声明 typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO; 为什么RGBQUAD数组是静态的? 为什么它不是一个指针?