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

Problem sa prikazivanjem bitmape

[es] :: C/C++ programiranje :: Problem sa prikazivanjem bitmape

[ Pregleda: 1166 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Rato iks de
Ratomir Vukadin
Software Engineer
Sarajevo

Član broj: 254175
Poruke: 68
89.111.250.*



+3 Profil

icon Problem sa prikazivanjem bitmape16.09.2011. u 17:03 - pre 152 meseci
Imam problem sa prikazivanjem bitmape. Prikazujem bitmapu iz resursa.
Kreirao sam klasu Bitmap i postavio pokazivač na nju.
Code:
Bitmap *Pozadina1

//kreiram pozadinu preko konstruktora
Pozadina1 = new Bitmap(hDC, IDB_POZADINA1, hInstance);

//u metodi Delete pobrisem ovu pozadinu
delete Pozadina1;


//u metodi Draw treba da iscrtam tu bitmapu
Pozadina1->Draw(hDC, 0, 0); 


E sad je Pozadina1 pristupila metodama Draw, gdje Draw sadrzi u sebi metodu DrawPart.
Code:

void Bitmap::Draw(HDC hDC, int x, int y, BOOL bTrans, COLORREF crTransColor)
{
  DrawPart(hDC, x, y, 0, 0, GetWidth(), GetHeight(), bTrans, crTransColor);
}

void Bitmap::DrawPart(HDC hDC, int x, int y, int xPart, int yPart,
  int wPart, int hPart, BOOL bTrans, COLORREF crTransColor)
{
  if (m_hBitmap != NULL)
  {
    HDC hMemDC = CreateCompatibleDC(hDC);

    HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, m_hBitmap);

    if (bTrans)
      TransparentBlt(hDC, x, y, wPart, hPart, hMemDC, xPart, yPart,
        wPart, hPart, crTransColor);
    else
      BitBlt(hDC, x, y, wPart, hPart, hMemDC, xPart, yPart, SRCCOPY);

    SelectObject(hMemDC, hOldBitmap);
    DeleteDC(hMemDC);
  }
}


U klasi Bitmap ove dvije metode su deklarisane tako sto su argumentima bTrans i crTransColor već postavljene na osnovne vrjednosti.
Code:

void Draw(HDC hDC, int x, int y, BOOL bTrans = FALSE, COLORREF crTransColor = RGB(255, 0, 255));
void DrawPart(HDC hDC, int x, int y, int xPart, int yPart,
    int wPart, int hPart, BOOL bTrans = FALSE, COLORREF crTransColor = RGB(255, 0, 255));


Takođe, iscrtavanje sprajtova radim preko ovih metoda.

Zato kad iscrtavam bitmapu metodi Draw ne predajem 5 argumenata nego 3. Ne koristim Pozadinu1 kao transparentnu, i boju koju sam naveo RGB(255, 0, 255)
ću koristiti kao transparentnu boju kad budem iscrtavao sprajtove. Samo kad iscrtavam sprajt ja posaljem TRUE varijabli bTrans umjesto FALSE.

Sve se kompajlira, nema errora ni upozorenja ali pozadina crna. Sprajtovi se prikazuju kako i treba ali na crnoj pozadini.
Unaprijed HVALA ;)
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Problem sa prikazivanjem bitmape16.09.2011. u 18:48 - pre 152 meseci
U kom trenutku unistavas pokazivac na bitmapu (delete Pozadina1;)? Iz primera se zakljucuje da je prvo unistavas pa zatim koristis...
 
Odgovor na temu

Rato iks de
Ratomir Vukadin
Software Engineer
Sarajevo

Član broj: 254175
Poruke: 68
89.111.250.*



+3 Profil

icon Re: Problem sa prikazivanjem bitmape16.09.2011. u 20:49 - pre 152 meseci
Da tako je. U zavrsnom .cpp fajlu prvo koristim metodu koja pravi ove bitmape, zatim ide metoda kojom ih i uništavam
a iza njih metoda kojim ih trebam ispisati.
Tako sam i definisao u klasi Bitmap.

Ja mogu problem da riješim tako što ću iscrtavati jednu po jednu bitmapu. Ali ja sam zamislio da nakon
određenog ciklusa promjenim pozadinu.

E to se može odraditi ovako da crtam jednu po jednu bitmapu.
Code:

            HBITMAP Pozadina1;
            Pozadina1 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_POZADINA1));
        MemDCPozadina1 = CreateCompatibleDC(hdc);
             
             SelectObject(MemDCPozadina1, Bar);
         BitBlt(hdc, 0, 0, 500, 400, MemDCPozadina1, 0, 0, SRCCOPY);

        DeleteDC(MemDCPozadina1);
        DeleteObject(Pozadina1);    


E ovako radi to dobro ali ja mislim da je bezveze. Isto kao kad imaš da ispišeš 100 brojeva pa ideš cout<<"1"... pa sve tako do stoje :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Problem sa prikazivanjem bitmape

[ Pregleda: 1166 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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