Pregunta

Estoy tratando de crear una aplicación de lupa en .net usando la API de ampliación de Windows. Prácticamente tengo todo funcionando, excepto configurar el nivel de aumento (que por defecto es 100%). El problema es que no puedo encontrar ningún ejemplo en ninguna parte de la red y toda la documentación para la API es código C ++. Esta es la función particular con la que tengo problemas.

bool SetMagFactor(float magfactor)
{
    MAGTRANSFORM matrix;
    memset(&matrix, 0, sizeof(matrix));
    matrix.v[0][0] = magfactor;
    matrix.v[1][1] = magfactor;
    matrix.v[2][2] = 1.0f;
    return MagSetWindowTransform(hwndMag, &matrix);  
}

La estructura MAGTRANSFORM se define de la siguiente manera:

typedef struct tagMAGTRANSFORM {
    float v[3] [3];
} MAGTRANSFORM, *PMAGTRANSFORM;

La parte más confusa de esto es el memset: no estoy seguro de qué hace o cuál es su equivalente en .NET, pero lo que también es confuso es la matriz / matriz multidimensional y cómo manejaría esto. NET también.

Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

El memset simplemente está limpiando la matriz para comenzar. No necesitaría hacer esto en .NET. Sospecho que la forma más simple de definir la estructura en C # sería especificar cada elemento individualmente:

public struct MagTransform
{
    readonly float m00;
    readonly float m10;
    readonly float m20;
    readonly float m01;
    readonly float m11;
    readonly float m21;
    readonly float m02;
    readonly float m12;
    readonly float m22;

    public MagTransform(float magnificationFactor) : this()
    {
        m00 = magnificationFactor;
        m11 = magnificationFactor;
        m22 = 1.0f;
    }
}

También es posible que deba especificar el diseño; me temo que no estoy tan interesado en la clasificación.

Como puede ver, asumí los valores que desea en función del código de muestra. Habrá advertencias sobre los valores no utilizados, pero está bien.

Usted podría usar un búfer fijo y un código inseguro ... pero creo que probablemente usaría lo anterior. Básicamente solo necesitas 9 flotadores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top