Форум программистов, компьютерный форум CyberForum.ru

Нужно сохранить нарисованное мышкой на поверхности DirectX в BMP файл - C++

Восстановить пароль Регистрация
 
gidm
0 / 0 / 0
Регистрация: 02.06.2008
Сообщений: 3
22.06.2010, 07:53     Нужно сохранить нарисованное мышкой на поверхности DirectX в BMP файл #1
Здравствуйте! Помогите с проблемой сохранения картинки нарисованной на поверхности.
Задача состоит в следующем: есть поверхность pImage типа IDirectDrawSurface7, на ней мышкой рисуем так:
Код
void MouseMove(DWORD x, DWORD y, DWORD button)
{
	if ((button == MOUSE_DOWN_LEFT) && ((nOldMouseX != x) || (nOldMouseY != y))) 
	{		
		HDC hdc;
		pImage->GetDC(&hdc);
		if (hdc)
		{
			if (sPainting == PEN)
			{
				SelectObject(hdc, CreatePen(PS_SOLID, 0, RGB(128, 128, 0)));
				MoveToEx(hdc, nOldMouseX-xlCanvas, nOldMouseY-ylCanvas, NULL);
				LineTo(hdc, x-xlCanvas, y-ylCanvas);
			}
			pImage->ReleaseDC(hdc);
		}
		else
			WriteLog('Can`t get DC');

		nOldMouseX = x;
		nOldMouseY = y;
	}
}
Функция работает и на поверхности предварительно залитой белым цветом рисуется черным цветом все что мышкой водится. Но вот когда я хочу сохранить это художестов в виде Bitmap с помощью следующей функции:
[code]
void SaveBitmap()
{
HFILE hf = NULL;
OFSTRUCT OfStruct;
HDC hdc = NULL;
HDC compatibleDC = NULL;
BITMAP bmp;
HBITMAP hbm = NULL;
LPBYTE lpBits = NULL;
PBITMAPINFO pbi = NULL;
PBITMAPINFOHEADER pbih = NULL;
BITMAPFILEHEADER bfh;
UINT cb;
BYTE *hp;

pImage->GetDC(&hdc);
if (hdc != NULL)
{
if((compatibleDC = CreateCompatibleDC(hdc))!= NULL)
if((hbm = CreateCompatibleBitmap(hdc, widthCanvas, heightCanvas)) != NULL)
{
SelectObject(compatibleDC, hbm);
if (GetObject(hbm, sizeof(BITMAP), (LPSTR)&bmp))
{
WriteLog('%d %d %d %d %d %d',
bmp.bmType,
bmp.bmBits,
bmp.bmPlanes,
bmp.bmWidth,
bmp.bmHeight,
bmp.bmPlanes * bmp.bmBitsPixel);
if ((WORD)(bmp.bmPlanes * bmp.bmBitsPixel) == (WORD)24
|| (WORD)(bmp.bmPlanes * bmp.bmBitsPixel) == (WORD)32)
{
if ((pbi = (PBITMAPINFO)LocalAlloc(LPTR, sizeof(BITMAPINFOHEADER))) != NULL)
{
pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbi->bmiHeader.biWidth = bmp.bmWidth;
pbi->bmiHeader.biHeight = bmp.bmHeight;
pbi->bmiHeader.biPlanes = bmp.bmPlanes;
pbi->bmiHeader.biBitCount = bmp.bmBitsPixel;
pbi->bmiHeader.biCompression = BI_RGB;
pbi->bmiHeader.biSizeImage =
((pbi->bmiHeader.biWidth * pbi->bmiHeader.biBitCount +
31) & ~31) / 8 * pbi->bmiHeader.biHeight;
pbi->bmiHeader.biClrImportant = 0;
pbih = (PBITMAPINFOHEADER)pbi;
lpBits = (LPBYTE)GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);
if (!lpBits)
WriteLog('Can`t global alloc memory lpBits');
if (!GetDIBits(hdc, hbm, 0, (WORD)pbih->biHeight, lpBits, pbi, DIB_RGB_COLORS))
WriteLog('Can`t get dib bits');

if ((hf = OpenFile('1.bmp', &OfStruct, OF_CREATE | OF_READWRITE)) != HFILE_ERROR)
{
bfh.bfType = 0x4D42;
bfh.bfSize = sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) + pbi->bmiHeader.biSizeImage;
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER);
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
if ((cb = _lwrite(hf, (LPSTR)&bfh, sizeof(BITMAPFILEHEADER))) != HFILE_ERROR)
{
WriteLog('%d', cb);
if ((cb = _lwrite(hf, (LPSTR)&(pbi->bmiHeader), sizeof(BITMAPINFOHEADER))) != HFILE_ERROR)
{
WriteLog('%d', cb);
//hp = lpBits;
if ((cb = _lwrite(hf, (LPSTR)lpBits, pbi->bmiHeader.biSizeImage))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2010, 07:53     Нужно сохранить нарисованное мышкой на поверхности DirectX в BMP файл
Посмотрите здесь:

Конвертировать bmp файл в txt C++
C++ Нужно bmp перевести в jpg пoд win16
C++ BMP - файл
Запись в файл BMP C++
bmp файл.Яркость (C++) C++
Нужно сохранить результат в png, a не в bmp C++
Ffmpeg сохранить AVFrame в .bmp или .jpg C++
C++ Нужно создать новый вектор и сохранить его в файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru