Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Загрузка изображения DirectX


Автор: MrZarkon 3.3.2012, 23:54
Проблема такая.Есть функция загрузки изображения

Код

IDirectDrawSurface7 *LoadBMPToSurface(LPCTSTR filename , IDirectDraw7 *ppiDD)
{
 IDirectDrawSurface7 *surf;
 HANDLE hBmp;
 BITMAP bm;

 //загрузка картинки из файла
 hBmp = LoadImage(0 , filename , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE | LR_CREATEDIBSECTION);
 if(hBmp == 0)
 return 0;
 GetObject(hBmp , sizeof(bm) , &bm);
 DDSURFACEDESC2 desc;
 ZeroMemory(&desc , sizeof(desc));
 desc.dwSize = sizeof(desc);
 desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
 desc.dwWidth = bm.bmWidth;
 desc.dwHeight = bm.bmHeight;
 desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;

 //создание поверхности
 HRESULT r = ppiDD->CreateSurface(&desc , &surf , 0);
 if(r != DD_OK)
 return 0;

 //картинку на поверхность
 HDC hdcImage;
 hdcImage = CreateCompatibleDC(0);
 if(hdcImage == 0)
 return 0;
 SelectObject(hdcImage , hBmp);

 HDC hdc;
 surf->GetDC(&hdc);
 StretchBlt(hdc , 0 , 0 , bm.bmWidth , bm.bmHeight , hdcImage , 0 , 0 , bm.bmWidth , bm.bmHeight , SRCCOPY);
 surf->ReleaseDC(hdc);

 DeleteDC(hdcImage);
 DeleteObject(hBmp);
 return surf;
}


Я ее перепроверил,даже брал с готового,рабочего примера,они одинаковые.И есть код отображения

Код


case WM_PAINT:
 hdc = BeginPaint(hWnd , &ps);
 BOOL Windowed = FALSE;
 if((imagesurf != NULL) && (!Windowed))
 {
 MessageBox(hWnd , "Изображение успешно загружено" , "ОК" , MB_OK);
 RECT dst;
 dst.top = 0;
 dst.left = 0;
 dst.right = iWidth;
 dst.bottom  = iHeight;

 DDBLTFX bltfx;
 ZeroMemory(&bltfx , sizeof(bltfx));
 bltfx.dwSize = sizeof(bltfx);


 backsurf->BltFast(0 , 0 , imagesurf , NULL , DDBLTFAST_WAIT);
 primsurf->Flip(NULL , DDFLIP_WAIT);
 }
 else
 MessageBox(hWnd , "Не удалось загрузить изображение!" , "Ошибка" , MB_OK|MB_ICONERROR);

 EndPaint(hWnd , &ps);
 break;



Ошибка находится в переменной imagesurf,видимо она остается пустой.Но есть код

Код

  if(DXDDInit(&ppiDD , &primsurf , &backsurf , hWnd ,  iWidth , iHeight , 16, FALSE) != S_OK)
  {
  return FALSE;
  }
  imagesurf = LoadBMPToSurface("BG.bmp" , ppiDD);

  ShowWindow(hWnd,nCmdShow);
  UpdateWindow(hWnd);
  MSG msg;



Помогите плиз найти ошибку

Автор: BorisVorontsov 6.3.2012, 13:52
Пошагово проходил?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)