Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BCB: (zlo)upotreba BitBlt

[es] :: C/C++ programiranje :: BCB: (zlo)upotreba BitBlt

[ Pregleda: 2282 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Duke Nukem
Miroslav Mitic
dipl.mas.ing - tehnolog za hidrauliku/
REL, MAG panciranje i zavarivanje bla
bla...
Lazarevac

Član broj: 38933
Poruke: 143
*.absolutok.net.



+1 Profil

icon BCB: (zlo)upotreba BitBlt21.03.2006. u 22:50 - pre 220 meseci
Sledeca funkcija bi trebalo da crta bitmapu direktno na HDC ( Forme )
koristeci API f-ju BitBlt (zaobilazimo standardno BCB crtanje po Canvas->Brush->DrawRect...)
ali ne funkcionise


Code:

HBITMAP hbmp;   // pointer
  PAINTSTRUCT ps;
  BITMAP bm;
  HDC hdc, hdcMem ; // BitBlt parametri

 Graphics::TBitmap *slika = new Graphics::TBitmap(); // VCL klasa za BITMAPU
 slika->LoadFromFile("Slika.bmp");
 hbmp= slika; //  ovo je proslo ???
 HWND hwnd = Form1->Handle;
if(hbmp == NULL)
   {
     MessageBox(hwnd, "Ne moze da ucita sliku", "Greska", MB_OK );
      return;
   }

 hdc = GetDC(hwnd);
 hdcMem = CreateCompatibleDC(hdc);
 HBITMAP hbmOld = (HBITMAP) SelectObject(hdcMem, hbmp);
 GetObject(hbmp, sizeof(bm), &bm);

 BitBlt(hdc,0,0,slika->Width, slika->Height,hdcMem ,0,0,SRCCOPY);
 SelectObject(hdcMem, hbmOld);
 DeleteDC(hdcMem);


delete slika;

// nema rezultata

ps izvinjavam se ako je kod malo neuredan.

Tape loading error
 
Odgovor na temu

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: BCB: (zlo)upotreba BitBlt22.03.2006. u 14:07 - pre 220 meseci
nisi naznačio da li to crtanje radiš pri obradi WM_PAINT, ali probaj ovako pri obradi iste :

Code:

static HBITMAP hbmp;
PAINTSTRUCT ps;
BITMAP bm;

hbmp = LoadImage(NULL, "Slika.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hbmp == NULL)
{
    //...
}

HDC hdcMem = CreateCompatibleDC(NULL);
HBITMAP hbmpOld = (HBITMAP)SelectObject(hdcMem, hbmp);
GetObject(hbmp, sizeof(BITMAP), &bm);
HWND hWnd = Form1->Handle;
BeginPaint(hWnd, &ps);
BitBlt(ps.hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
SetBkMode(ps.hdc, TRANSPARENT);
EndPaint(hWnd, &ps);
SelectObject(hdcMem, hbmpOld);
ReleaseDC(hdcMem);


Naravno, posle moraš da oslobodiš hbmp, kada završiš sa njegovom upotrebom.
Funkcije BeginPaint i EndPaint se koriste isključivo pri obradi WM_PAINT poruke.

Za probleme oko funkcije LoadImage pogledaj na :
http://support.microsoft.com/kb/q158898/

[Ovu poruku je menjao stargazer dana 22.03.2006. u 23:53 GMT+1]
With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

[es] :: C/C++ programiranje :: BCB: (zlo)upotreba BitBlt

[ Pregleda: 2282 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.