Frage

Ich versuche Pixelwerte (8 Bit pro Kanal RGBA) zu modifizieren, indem numerisch steigenden / die Werte um einen bestimmten Betrag verringert wird. Wie kann ich dies in Objective-C oder C? Der folgende Code erzeugt ein " Fehler: EXC_BAD_ACCESS ". Jedes Mal

// Try to Increase RED by 50
    for(int i = 0; i < myLength; i += 4) {

        //NSLog prints the values FINE as integers
            NSLog(@"(%i/%i/%i)", rawData[i], rawData[i+1], rawData[i+2]);

            //But for some reason I cannot do this
        rawData[i]+=50;

}

und sogar

// Try to set RED to 50
    for(int i = 0; i < myLength; i += 4) {

            //I cannot even do this...
        unsigned char newVal = 50;
        rawData[i] = 50;

}

Nebenbei bemerkt: rawData ist ein Datenpuffer vom Typ unsigned char

War es hilfreich?

Lösung

Es ist möglich, dass Sie das Ende Ihrer zugewiesenen Puffer sind Überholkupplung, und das ist, warum Sie die Zugriffsverletzung zu bekommen. Dass die meisten wahrscheinlich bedeutet, dass Sie Ihre mathematische bei der Zuweisung falsch ist, oder Ihr rawData Zeiger ist vom falschen Typ.

Wenn Sie die Rohdaten einer geladenen UIImage zugreifen, könnte es in den Speicher abgebildet werden schreibgeschützt. Sie müssen die Daten in einen Puffer kopieren, dass Sie zugeteilt, am wahrscheinlichsten.

Andere Tipps

Hmm ... Was ist rawdata? Vielleicht was es ist ein const Typ Sie nicht ändern können?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top