[ClanLib] Überprüfen auf Transparenz funktioniert nicht



  • Hi !

    Ich möchte gerne eine Grafik in einem bestimmmen Unterrechteck auf Transparenz überprüfen. Leider funktioniert das nicht so wie ich möchte.

    bool Node::check_if_subRect_occupied( CL_Surface* surface , CL_Rect* rect ) {
    
        //for simplicity...
        int x0 = rect->left;
        int x1 = rect->right;
        int y0 = rect->top;
        int y1 = rect->bottom;
    
        CL_PixelBuffer pxBuffer = surface->get_pixeldata();
    
        //for direct pixel access we need to lock the surface. later we will unlock it.
        pxBuffer.lock();
    
        //we have an argb image, which means every pixel is made out of 4 bytes. sizeof( int ) is 4 bytes !
        int* pixels = (int*) pxBuffer.get_data();
    
        for( int j = y0 ; j < y1 ; ++j ) {
            for( int i = x0 ; i < x1 ; ++i ) {
                std::cout << pxBuffer.get_pixel( i , j ).color << "\n";
    
                if( pixels[ j * surface->get_width() + i ] != TRANSPARENT ) {
                    pxBuffer.unlock();
                    return true;
                }
    
            }
        }
    
        pxBuffer.unlock();
        return false;
    }
    

    Das Problem ist, dass die Methode nicht korrekt funktioniert. Leider finde ich den Fehler nicht.

    Dazu muss ich sagen , dass ich vorher schon andere Varianten ausprobiert habe wie pxBuffer.pixel( i , j ).get_alpha(). Allerdings erhalte ich beim Ausführen der ClanLib Funktionen immer 0.

    mfg
    Tom

    ps: TRANSPARENT ist eine Konstante: const int TRANSPARENT = 0;



  • Hat dein Pixelbuffer überhaput Alpha gesetzt?

    Bye, TGGC (Wähle deine Helden)


Anmelden zum Antworten