OpenNETCF Signatursteuerungsfrage

Ich verwende das Signatur-Steuerelement in OpenNETCF. Es funktioniert großartig für fast alles, was ich brauche.

Ich brauche jedoch eine Möglichkeit, die Signatur umzukehren und wieder zu laden.

s hat einen Aufruf, um die "Bytes" für die Signatur zu erhalten GetSignatureEx()). Es gibt ein @ zurübyte[] der Unterschrift. Diese Signatur kann dann wieder mit @ geladen werdLoadSignatureEx().

Ich kann das System für diese Bytes nicht herausfinden. Ich dachte, sie könnten Koordinaten sein, aber das scheint jetzt nicht so zu sein.

Wenn jemand da draußen eine Möglichkeit kennt, die Signatur umzukehren und wieder einzulegen, wäre ich dankbar, sie zu hören.

Hinweis für andere, die sich interessieren könnten:

Diese Bytes scheinen die folgende Struktur zu haben (in der Reihenfolge):

2 bytes to show Width  
2 bytes to show Height  
  -- This next part repeats till the end of the array  
  2 bytes to show How many points are in the next line  
    -- This next part repeats as many times as the previous line indicated  
    1 byte for the x coordinate of the point  
    1 byte for the y coordinate of the point  
    2 bytes for the width of the pen (I am not 100% sure on this one)  

Ich werde meinen endgültigen Code veröffentlichen, sobald ich ihn fertig habe.

Letzter Hinweis: Ok, nach tonnenweise Arbeit habe ich festgestellt, wie einfach es ist, die Ansicht mithilfe der eingebauten Funktionen umzudrehen (danke MusiGenesis). Das scheint mir viel weniger fehleranfällig zu sein.

Nur für den Fall, dass jemand anderes es will, hier ist meinunvollende code. (Ich war nah dran, aber das Zeug, zur nächsten "Zeile" vorzurücken, funktioniert nicht ganz richtig.) (BEARBEITEN: Ich habe festgestellt, dass mir die Funktionsweise etwas besser gefällt. Ich habe den folgenden Code aktualisiert. Solange die Breite oder Höhe des Signature-Steuerelements nicht größer als 256 ist, funktioniert dies. (Siehe die Antwort von ctacke unten.) .)

Aber zuerst ein großes Dankeschön an MusiGenesis, die mir geholfen haben, all das herauszufinden. Sie sind sehr hilfreich und ich schätze Ihre Bemühungen sehr!

Jetzt den Code:

private void InvertSignature(ref byte[] original)
{
    int currentIndex = 0;
    short width = BitConverter.ToInt16(original, 0);
    short height = BitConverter.ToInt16(original, 2);
    while (currentIndex < original.Length - 4)
    {
        // Move past the last iteration (or the width and hight for the first time through).
        currentIndex += 4;
        // Find the length of the next segment.
        short nextGroup = BitConverter.ToInt16(original, currentIndex);
        //Advance one so we get past the 2 byte group
        currentIndex += 2;
        // Find the actual index of the last set of coordinates for this segment.
        int nextNumberOfItems = ((nextGroup) * 4) + currentIndex;
        // Invert the coordinates
        for (int i = currentIndex; i < (nextNumberOfItems - 1); i += 4)
        {
            currentIndex = i;

            //Invert Horizontal
            int newHorzPoint = width - original[i] - 1;
            if (newHorzPoint <= 0)
                newHorzPoint = 0;
            else if (newHorzPoint >= width - 1)
                newHorzPoint = width - 1;
            original[i] = (byte)newHorzPoint;

            // Invert Vertical
            int newVertPoint = height - original[i + 1] - 1;
            if (newVertPoint <= 0)
                newVertPoint = 0;
            else if (newVertPoint >= height - 1)
                newVertPoint = height - 1;
            original[i + 1] = (byte)newVertPoint;
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage