GDI+ DrawImage malt wo es nicht soll!



  • Hmm ... also das Problem was hier auftritt ist, das obwohl Koordinaten für die Bitmap pPercentBitmapPart angegeben wurden der die einfach an die Stelle 0, 0 setzt. Jemand ne Idee?

    Hier der Code:

    Gdiplus::Pen pen(Gdiplus::Color(128, 128, 128));
    		/************************************************************************/
    		/*  Draw percent bar edges                                              */
    		/************************************************************************/
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 - 55, rect.bottom - 30, (rect.right - rect.left) / 2 - 51, rect.bottom - 30);
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 - 50, rect.bottom - 35, (rect.right - rect.left) / 2 - 50, rect.bottom - 31);
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 + 55, rect.bottom - 30, (rect.right - rect.left) / 2 + 51, rect.bottom - 30);
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 + 50, rect.bottom - 35, (rect.right - rect.left) / 2 + 50, rect.bottom - 31);
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 + 55, rect.bottom - 20, (rect.right - rect.left) / 2 + 51, rect.bottom - 20);
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 + 50, rect.bottom - 15, (rect.right - rect.left) / 2 + 50, rect.bottom - 19);
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 - 55, rect.bottom - 20, (rect.right - rect.left) / 2 - 51, rect.bottom - 20);
    		pMemGraphics->DrawLine(&pen, (rect.right - rect.left) / 2 - 50, rect.bottom - 15, (rect.right - rect.left) / 2 - 50, rect.bottom - 19);
    		/************************************************************************/
    
    		brush.SetColor(Gdiplus::Color(255, 255, 255));
    		Gdiplus::Bitmap*	pMemBitmapPercent		= new Gdiplus::Bitmap(114, 10);
    		Gdiplus::Graphics*	pMemGraphicsPercent		= Gdiplus::Graphics::FromImage(pMemBitmap);
    
    		for (unsigned short percent = 0; percent < (100 / 7); ++percent)
    		{
    			Gdiplus::GraphicsPath* path = new Gdiplus::GraphicsPath;
    			path->AddLine((percent * 7) + 10, 0, (percent * 7) + 5, 0);		// top right	=> top left
    			path->AddLine((percent * 7) + 10 + 5, 0, (percent * 7) + 5, 9);	// top right	=> bottom right
    			path->AddLine((percent * 7) + 5, 9, (percent * 7), 9);			// bottom right	=> bottom left
    			path->AddLine((percent * 7) + 10, 0, (percent * 7), 9);			// bottom left	=> top left
    			pMemGraphicsPercent->FillPath(&brush, path);
    			delete path;
    		}
    		Gdiplus::Rect percent_rect(4, 0, min(m_percent, 100), 10);
    		Gdiplus::Bitmap* pPercentBitmapPart = pMemBitmapPercent->Clone(percent_rect, PixelFormatDontCare);
    		pMemGraphics->DrawImage(pPercentBitmapPart, (rect.right - rect.left) / 2 - 50, rect.bottom - 29);
    		delete pMemGraphicsPercent;
    		delete pMemBitmapPercent;
    
    		graphics.DrawImage(pMemBitmap, 0, 0);
    		delete pMemBitmap;
    		delete pMemGraphics;
    

    ... ok der Code istnoch nicht optimiert aber das ist ja auch nicht der Punkt 😉



  • Achja ... wenn fragen zum Code sind stellt sie einfach ... mir ist nur wichtig zu wissen warum DrawImage das Bild nicht an die angegebene Stelle setzt 😞



  • Och meno der Code ist doch leicht verständlich und schön strukturiert ... hat keiner ne Idee warum DrawImage so falsch funktioniert?



  • Armer (D)Evil 😉



  • Hm, haste mal im Debugger geguckt und die Werte verfolgt?



  • Ja sind alle korrekt ... selbst wenn ich beim DrawImage feste Werte eingebe setzt er die Prozent-Leiste auf 0, 0



  • War nur nen Tippfehler ... der Code ist sonnst vollkommen korrekt 😃 Ich depp ...

    pMemBitmapPercent muss es auch beim erstellen vom pMemGraphicsPercent heißen ^^


Log in to reply