Probleme mit SetDIBitsToDevice



  • hallo,

    ich programmiere einen einfachen ColorPicker und habe das Problem, dass mein Pickerfield gedreht angezeigt wird m wärend die MouseMove Funktion korrekt ist.
    Wenn ich also einen einfachen Gradienten erzeuge, der von Oben Rot nach Unten Schwarz wird, dann wird mir der falsche Wert angezeigt.

    CODE:

    im Header habe ich definiert:

    private:
    	COLORREF m_crData[320*240];
    	BITMAPINFO m_bmi;
    

    im Oninit habe ich folgenden Code:

    for(int y = 240 - 1; y >=0; y--) //lines
    	{
    		for(int x = 0; x < 320; x++)
    		{		
    			this->m_crData[y * 320 + x] = RGB(y*240/255, x*255/320, 64);
    		}
    	}
    
    	ZeroMemory(&m_bmi, sizeof(BITMAPINFO));
    
    	this->m_bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    	this->m_bmi.bmiHeader.biWidth = 320;
    	this->m_bmi.bmiHeader.biHeight = 240;
     	this->m_bmi.bmiHeader.biPlanes = 1;
    	this->m_bmi.bmiHeader.biBitCount = 32;
    	this->m_bmi.bmiHeader.biCompression = BI_RGB;
    

    in der OnPaintanweisung steht dann:

    if(!SetDIBitsToDevice(dc, 20, 20, 320, 240, 0, 0, 0, 320, this->m_crData, &this->m_bmi, DIB_RGB_COLORS))AfxMessageBox("ERROR");
    

    in WM_MouseMove

    CString str;
    	int pos_x, pos_y;
    
    	pos_x = point.x - 20; //rand
    	pos_y = point.y - 20; //rand
    
    	if(pos_x >= 0 && pos_x < 320 && pos_y >= 0 && pos_y < 240)
    	{
    		COLORREF cr = this->m_crData[pos_y * 320 + pos_x];
    		str.Format("RGB = {%lu, %lu, %lu}", (DWORD)GetRValue(cr), (DWORD)GetGValue(cr), (DWORD)GetBValue(cr)); 	}
    	else
    	{
    		str = "Keine Pixeldaten hier!";
    	}
    
    	this->SetWindowText(str);
    

    vielen Dank für Hilfe


Log in to reply