Skocz do zawartości

Out Of Memory-mal RAMU przy rysowaniu


Lord

Recommended Posts

Nie chcialem tego watku pisac bo wydawalo mi sie ze gdzies go widzialem ale teraz nie moge znalezc wiec pisze ;).Otoz mam problem podczas rysowania.Na kompie z mala iloscia pamieci (48 M P166) rysuje sobie cos tam na hdc.Sporo tego jest bo i jakies tla i animacje i inne duperelki wiec czeste zmienianie pena i brusha i innych rzeczy.Niby wszystkie obiekty sa zawsze usuwane,hdc zwalniane a i tak po jakims czasie system sie sypie bo zostaje mu okolo 3% pamieci RAM ;).Czy ktos wie jaki moze byc z tym problem ? Moge wyrzucic kawalek kodu gdyby komus to pomoglo.Dzieki z gory.Czesc.

Link do komentarza
Udostępnij na innych stronach

To jest program rysujacy ostroslup trojwymiarowy z mozliwoscia obracania go (tzn element rysujacy w komunikacie od timera)
case WM_TIMER:
{
HBRUSH hbr;
HRGN hrgn;
HPEN pen,pioro;
HDC hdc;
hdc=GetDC(hWnd);
hrgn=CreateRectRgn(0,0,1200,800);
hbr=CreateSolidBrush(RGB(100,255,0));
SelectObject(hdc,hrgn);
FillRgn(hdc,hrgn,hbr);
DeleteObject(hrgn);
DeleteObject(hbr);
Obrot_y(tab1,3);
Obrot_y(tab2,3);
Obrot_y(tab3,3);
Obrot_y(tab4,3);
Obrot_y(tab5,3);
pioro = CreatePen(PS_SOLID, 3 , RGB(0,0,200));
SelectObject(hdc,pioro);
MoveTo(hdc,496,329);
LineTo(hdc,498,331);
LineTo(hdc,498,329);
MoveTo(hdc,497+(tab1[0][0]*90)-(31.819805*tab1[2][0]),330+(31.819805*tab1[2][0])-(tab1[1][0]*90));
LineTo(hdc,497+(tab2[0][0]*90)-(31.819805*tab2[2][0]),330+(31.819805*tab2[2][0])-(tab2[1][0]*90));
LineTo(hdc,497+(tab3[0][0]*90)-(31.819805*tab3[2][0]),330+(31.819805*tab3[2][0])-(tab3[1][0]*90));
LineTo(hdc,497+(tab4[0][0]*90)-(31.819805*tab4[2][0]),330+(31.819805*tab4[2][0])-(tab4[1][0]*90));
LineTo(hdc,497+(tab1[0][0]*90)-(31.819805*tab1[2][0]),330+(31.819805*tab1[2][0])-(tab1[1][0]*90));
LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90));
MoveTo(hdc,497+(tab2[0][0]*90)-(31.819805*tab2[2][0]),330+(31.819805*tab2[2][0])-(tab2[1][0]*90));
LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90));
MoveTo(hdc,497+(tab3[0][0]*90)-(31.819805*tab3[2][0]),330+(31.819805*tab3[2][0])-(tab3[1][0]*90));
LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90));
MoveTo(hdc,497+(tab4[0][0]*90)-(31.819805*tab4[2][0]),330+(31.819805*tab4[2][0])-(tab4[1][0]*90));
LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90));
DeleteObject(pioro);
pioro = CreatePen(PS_SOLID, 1 , RGB(200,0,0));
SelectObject(hdc,pioro);
MoveTo(hdc,497+(tab1[0][0]*90)-(31.819805*tab1[2][0]),330+(31.819805*tab1[2][0])-(tab1[1][0]*90));
LineTo(hdc,497+(tab3[0][0]*90)-(31.819805*tab3[2][0]),330+(31.819805*tab3[2][0])-(tab3[1][0]*90));
MoveTo(hdc,497+(tab2[0][0]*90)-(31.819805*tab2[2][0]),330+(31.819805*tab2[2][0])-(tab2[1][0]*90));
LineTo(hdc,497+(tab4[0][0]*90)-(31.819805*tab4[2][0]),330+(31.819805*tab4[2][0])-(tab4[1][0]*90));
MoveTo(hdc,497+(tab0[0][0]*90)-(31.819805*tab0[2][0]),330+(31.819805*tab0[2][0])-(tab0[1][0]*90));
LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90));

DeleteObject(pioro);
ReleaseDC(hWnd,hdc);
break;
}

Link do komentarza
Udostępnij na innych stronach

Numero uno to przenies cale rysowanie do wm_paint. Due czy jakos tak jak wybierasz cokolwiek f. SelectObject to gdy juz tego nie uzywasz przywracaj poprzedni obiekt. To jest bardzo wazne przy kasowaniu obiektu. u Ciebie jest:

SelectObject(hdc,pioro); 

...
...
...
...

DeleteObject(pioro);

W dokumentacji jest napisane jak byk:
Do not delete a drawing object (pen or brush) while it is still selected into a device context.

Powinno to rozwiazac Twoje problemy.
pozdro

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...