Вопрос

Я пытаюсь изменить значения пикселей (8 бит на канал RGBA) путем численного увеличения / уменьшения значений на определенную величину.Как я могу сделать это в Objective-C или C?Следующий код генерирует "Ошибка:EXC_BAD_ACCESS ( ИСКЛЮЧЕНИЕ )" каждый раз.

// 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;

}

и даже

// 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;

}

Боковое Примечание: RawData - это буфер данных типа unsigned char

Это было полезно?

Решение

Вполне возможно, что вы переполняете конец выделенного вами буфера, и именно поэтому вы получаете нарушение доступа.Это, скорее всего, означает, что ваша математика неверна при распределении, или ваш указатель RawData имеет неправильный тип.

Если вы обращаетесь к необработанным данным загруженного UIImage, они могут быть отображены в память, доступную только для чтения.Скорее всего, вам нужно будет скопировать данные в буфер, который вы выделили.

Другие советы

Хм...Что такое rawdata?Может быть, это const тип, который вы не можете изменить?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top