Programmieren - alles kontrollieren 4.936 Themen, 20.625 Beiträge

DX7 und DirectDraw-Antialiasing

IDE-ATAPI / 10 Antworten / Flachansicht Nickles

Hallo, bezweifle zwar dass mir da jemand weiterhelfen kann aber trotzdem;


Hab ein Problem mit DirectDraw. Ich lade ein Bitmap mit Hilfe von Funktionen der "ddutil.h". (Also ganz der Standardweg)


Wenn ich das Bitmap jetzt mit bitblt vergrößert darstelle wirkt es verschwommen, wie durch Antialiasing, kann man das abstellen ?


Thx,


IDE-ATAPI

bei Antwort benachrichtigen
PaoloP IDE-ATAPI „Hier der Code: Geladen wird das Bitmap mit Hilfe von DDLoadBitmapFromDisk ist ne...“
Optionen

Hallo

Sorry, ich hab's ganz vergessen das hier noch was war ;-)
Hmm sieht eigentlich alles unverdächtig(auf den kurzen Blick) aus.
Allerdings fällt mir auf das da StretchBlt verwendet wird was mich sofort stutzig werden lässt da ich es dafür noch nie verwendet habe. Hier mal eine alternative Funktion die getestet ist und funktioniert allerdings setzt sie globale Schnitstellenzeiger für DD voraus, das müsstest Du evtl. noch anpassen. Komplettes Beispielprojekt gibts via E-Mail. Musst nur sagen wohin.

LPDIRECTDRAWSURFACE7 Load_Bitmap_In_Surface(LPCTSTR file_name, RECT*dims=NULL)
{
HDC hdc;
HBITMAP bit;
LPDIRECTDRAWSURFACE7 surf;
bit=(HBITMAP) LoadImage(NULL,file_name,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
if(!bit) return NULL;

BITMAP bitmap;
GetObject( bit, sizeof(BITMAP), &bitmap );
int surf_width=bitmap.bmWidth;
int surf_height=bitmap.bmHeight;

HRESULT ddrval;
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(DDSURFACEDESC2);
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT ;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth = surf_width;
ddsd.dwHeight = surf_height;

ddrval=lpDD->CreateSurface(&ddsd,&surf,NULL);
if (ddrval!=DD_OK)
{
DeleteObject(bit);
return NULL;
}
else
{
surf->GetDC(&hdc);
HDC bit_dc=CreateCompatibleDC(hdc);
SelectObject(bit_dc,bit);
BitBlt(hdc,0,0,surf_width,surf_height,bit_dc,0,0,SRCCOPY);
surf->ReleaseDC(hdc);
DeleteDC(bit_dc);
if (dims)
{
dims->left=0;
dims->top=0;
dims->right=surf_width;
dims->bottom=surf_height;
}
}

DeleteObject(bit);
return surf;
}

Gruß

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen