CDC-ausschnitt in Bitmap-array kopieren



  • hi,
    hab da n rieeesen problem, und zwar zeichne ich auf nem CImage-DeviceContext und muss regelmäßig einen kleinen teil neu zeichnen.

    also ich bewege quasi eine figur ueber dieses bild, und muss nun verhinder das das ding spuren hinter sich herzieht .. also:

    - wenn bild vorhanden, an alter position einfügen
    - neuen bildausschnitt an künftiger position kopieren
    - figur an neue position zeichnen

    und das so alle 50ms ... aber das problem ist, das er beim kopiern wohl irgendwas verhaut oder so, hab da schon diverse tutorials ausm netz probiert, aber es funzt einfach nicht, hier mal der wichtige teil 😉

    void CDrawInterface2D::loadRobot(int ID, int style, CVector pos){
    	CDC memDC; //temp speicher
    	memDC.CreateCompatibleDC(mDC); //mDC = pointer auf CImage-DC
    	BITMAP bmRobot;
    
    	//Eckkoordinaten des Roboters
    	CVector bottomright = pos + (CVector(ROBOTSIZE,ROBOTSIZE).scaled(0.5));
    	CVector topleft = pos - (CVector(ROBOTSIZE,ROBOTSIZE).scaled(0.5));
    	CPoint ptl = mGDIWrapper->WorldToPixel(topleft);
    	CPoint pbr = mGDIWrapper->WorldToPixel(bottomright);
    	//Breite und Hoehe des Roboters
    	int height = pbr.y - ptl.y;
    	int width  = pbr.x - ptl.x;
    
    	if (ID > 0){
    		//altes Bild einsetzen
    		if (mDrawnOnce){
    			memDC.SelectObject(&clrRobot[ID-1]);
    			mDC->StretchBlt(ptl.x,ptl.y,width,height,mDC,0,0,30,30,SRCCOPY);
    		}//if
    
    		//neues Bild kopiern
    		memDC.SelectObject(&clrRobot[ID-1]);
    		memDC.StretchBlt(0,0,30,30,mDC,ptl.x,ptl.y,width,height,SRCCOPY);
    
    		//Roboter laden
    		switch (style){
    			case 0: picture[16].GetObject(sizeof(bmRobot),&bmRobot);
    					memDC.SelectObject(&picture[16]);
    					break;
    			case 1: picture[17].GetObject(sizeof(bmRobot),&bmRobot);
    					memDC.SelectObject(&picture[17]);
    					break;
    			case 2: picture[18].GetObject(sizeof(bmRobot),&bmRobot);
    					memDC.SelectObject(&picture[18]);
    					break;
    			case 3: picture[19].GetObject(sizeof(bmRobot),&bmRobot);
    					memDC.SelectObject(&picture[19]);
    					break;
    		}//switch
    
    		mDC->StretchBlt(ptl.x,ptl.y,width,height,&memDC,0,0, 
    			          bmRobot.bmWidth,bmRobot.bmHeight,SRCCOPY);
    	}//if
    }//loadRobot
    

    clrRobot definiert als -> CBitmap clrRobot[20]; da sollen regelmäßig abhängig von der ID welche in der methode uebergeben wird neue ausschnitte rein.
    also die roboter ham ne ID und die robos werden eben alle 50ms gemalt.
    nu is eben das prob das der immer noch eine spur zieht, und nix kopiert und einfügt und dergleichen.

    hoffe mir kann einer helfen


Anmelden zum Antworten