Prob mit GetPixel(..)



  • Dieses Programm läuft gar nicht, die Funktion GetPixel gibt nur -1 aus...:

    void CForumView::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
    int color, farbe;
    srand(0);
    for(int count = 0; count < 3; count++)
    {
    farbe = rand()%255;
    dc.SetPixel(400,400, RGB(153, farbe, 153));
    color = dc.GetPixel(400, 400);
    }

    CView::OnLButtonDown(nFlags, point);
    }

    Dieses Programm läuft nur manchmal (mal richtiger Farbwert mal -1), gestern eigentlich zu 100% (Coordinaten wurden per Hand geändert), allerdings als OnLButtonDown...:

    void CForumView::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
    int color = 0;
    dc.SetPixel(400,400, RGB(153, 200, 153));
    color = dc.GetPixel(400, 400);

    CView::OnRButtonDown(nFlags, point);
    }
    Kann es sein, dass ich irgend ein(e) Befehl/Funktion vergessen habe?
    Axo: Die Werte von color habe ich immer im Debugger überprüft.



  • Ich glaube du mussst das CClientDC wieder freigeben nachdem du es benutzt hast probiers mal.

    void CForumView::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
    int color = 0;
    dc.SetPixel(400,400, RGB(153, 200, 153));
    color = dc.GetPixel(400, 400);
    Release(dc);
    CView::OnRButtonDown(nFlags, point);
    }

    [ Dieser Beitrag wurde am 17.11.2002 um 09:42 Uhr von gear editiert. ]



  • Also erstmal gibt GetPixel ein COLORREF zurück und kein int und zum zweiten ist das Schwachsinn mit dem freigeben. Das ist auf keinen Fall die Lösung für sein Problem, da es erst später geschieht. BTW, was soll der COde eigentlich bezwecken???



  • DEn Code habe ich nur zu Testzwecken geschrieben. GetPixel benötige ich für ein Fraktalprogramm.
    COLORREF ist ein 24bit (Rot 8bit, Grün 8bit , Blau 8bit) Integerwert. Oder liege ich da falsch?



  • Nein ist richtig (COLOREF == DWORD)

    Hast du schonmal

    CDC* pDC = GetDC();
        ReleaseDC(pDC);
    

    probiert?

    Ich hab mit CClientDC noch nie gearbeitet - vlt erzeugt es ja ein neues DC...


Anmelden zum Antworten