Использование GDI + Bitmap - PullRequest
       23

Использование GDI + Bitmap

3 голосов
/ 06 февраля 2009

Я использую класс GDI + Bitmap для преобразования IStream в HBITMAP. Я включил файл gliplus lib во входные данные компоновщика и также имею dll в пути сборки. Но используя утверждение

Bitmap bm(lpStream,FALSE);

выдает ошибку C2065: «Растровое изображение»: необъявленный идентификатор

Может кто-нибудь сказать мне, что я здесь делаю неправильно?

Спасибо.

Редактировать
Я уже включил соответствующие заголовки в свою реализацию (gdiplus.h), и я могу просмотреть определение Bitmap, выбрав опцию «Перейти к определению» в контекстном меню.

Ответы [ 2 ]

3 голосов
/ 15 мая 2009

Помимо проблемы с пространством имен, использование Gdiplus также требует, чтобы библиотека была инициализирована перед использованием:

ULONG_PTR gdiplusToken;
GdiplusStartupInput startupInput;
GdiplusStartup(&gdiplusToken, &startupInput, 0);

Вам нужно будет удерживать токен, пока вы не закончили использовать Gdiplus, а затем отпустить его:

GdiplusShutdown(gdiplusToken);

Если библиотека не инициализирована, операции Gdiplus завершатся с ошибкой GdiplusNotInitialized.

2 голосов
/ 06 февраля 2009

Вам также необходимо включить соответствующий заголовочный файл. В предположении, это, вероятно, будет иметь имя, подобное «Bitmap.h» или «gdi + .h».

Более подробная информация о растровом классе здесь . Правильный заголовочный файл - "gdiplus.h". Короче говоря:

#include "gdiplus.h"

Constructor Information
Stock Implementation  gdiplus.dll
Header    Declared in Gdiplusheaders.h, include gdiplus.h
Import library    gdiplus.lib
Minimum availability  GDI+ 1.0
Minimum operating systems  Windows 98/Me, Windows XP, Windows 2000,

Windows NT 4.0 SP6

В таблице в MSDN, где указано «Заголовок», указывается имя файла заголовка, который необходимо включить. «Библиотека импорта», которую вы уже рассмотрели. Если бы вы пропустили это, вы бы получили ошибку ссылки.

EDIT: В этой статье о начале работы с GDI + похоже, что существует пространство имен "Gdiplus", которое необходимо указать. Либо используйте «using пространство имен Gdiplus», либо укажите пространство имен явно.

#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;

VOID OnPaint(HDC hdc)
{
   Graphics graphics(hdc);
   Pen      pen(Color(255, 0, 0, 255));
   graphics.DrawLine(&pen, 0, 0, 200, 100);
}
...