Hier der Code:
          
          Geladen wird das Bitmap mit Hilfe von DDLoadBitmapFromDisk
          (ist ne Standardfunktion aus der DirectX SDK ddutil)
          
          extern "C" IDirectDrawSurface7*
          DDLoadBitmapFromDisk( IDirectDraw7* pdd, LPCSTR szBitmap, int dx, int dy)
          {
          HBITMAP hbm;
          BITMAP bm;
          DDSURFACEDESC2 ddsd;
          IDirectDrawSurface7 *pdds;
          
          // Try to load the bitmap as a resource, if that fails, try it as a file
          hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, dx,
          dy, LR_CREATEDIBSECTION);
          if (hbm == NULL)
          hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, dx, dy,
          LR_LOADFROMFILE | LR_CREATEDIBSECTION);
          if (hbm == NULL)
          return NULL;
          // Get size of the bitmap
          GetObject(hbm, sizeof(bm), &bm);
          // Create a DirectDrawSurface for this bitmap
          ZeroMemory(&ddsd, sizeof(ddsd));
          ddsd.dwSize = sizeof(ddsd);
          ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
          ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
          ddsd.dwWidth = bm.bmWidth;
          ddsd.dwHeight = bm.bmHeight;
          if (pdd->CreateSurface(&ddsd, &pdds, NULL) != DD_OK)
          return NULL;
          DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
          DeleteObject(hbm);
          return pdds;
          }
          
          In der DDLoadBitmapFromDisk wird ausserdem noch DDCopyBitmap,
          auch aus der SDK, aufgerufen:
          extern "C" HRESULT
          DDCopyBitmap(IDirectDrawSurface7* pdds, HBITMAP hbm, int x, int y,
          int dx, int dy)
          {
          HDC hdcImage;
          HDC hdc;
          BITMAP bm;
          DDSURFACEDESC2 ddsd;
          HRESULT hr;
          
          if (hbm == NULL || pdds == NULL)
          return E_FAIL;
          
          pdds->Restore();
          // Select bitmap into a memoryDC so we can use it.
          hdcImage = CreateCompatibleDC(NULL);
          if (!hdcImage)
          OutputDebugString("createcompatible dc failed\n");
          SelectObject(hdcImage, hbm);
          // Get size of the bitmap
          GetObject(hbm, sizeof(bm), &bm);
          dx = dx == 0 ? bm.bmWidth : dx; // Use the passed size, unless zero
          dy = dy == 0 ? bm.bmHeight : dy;
          // Get size of surface.
          ddsd.dwSize = sizeof(ddsd);
          ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
          pdds->GetSurfaceDesc(&ddsd);
          if ((hr = pdds->GetDC(&hdc)) == DD_OK)
          {
          StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,
          dx, dy, SRCCOPY);
          pdds->ReleaseDC(hdc);
          }
          DeleteDC(hdcImage);
          return hr;
          }
          
          Dann verpasse ich dem Bitmap noch einen Colorkey:
          void AddColorKey (LPDIRECTDRAWSURFACE7 surface, DWORD Low, DWORD High) // Colorkey routine
          {
          DDCOLORKEY key;
          ZeroMemory(&key, sizeof(key));
          key.dwColorSpaceLowValue = Low;
          key.dwColorSpaceHighValue = High;
          surface->SetColorKey (DDCKEY_SRCBLT, &key);
          }
          
          und blitte es mit Hilfe von:
          lpddsBack->Blt(&rectbitmap, lpddsBitmap, NULL, DDBLT_KEYSRC | DDBLT_WAIT, NULL);
          
          Zu den Größenangaben:
          Ich lade das Bild mit der Größe X -> 47 und Y -> 21,
          das Problem tritt aber auch auf wenn ich es jetzt mit
          der gleichen Größenangabe blitte.
          
          Thx,
          
          IDE-ATAPI