Pergunta

Estou tentando modificar os valores de pixel (8 bits por canal RGBA) aumentando/diminuindo numericamente os valores por uma certa quantidade. Como posso fazer isso em Objective-C ou C? O código a seguir gera um "Erro: exc_bad_access" toda vez.

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

}

e até mesmo

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

}

Nota: RawData é um buffer de dados do tipo de char não assinado

Foi útil?

Solução

É possível que você esteja invadindo o fim do seu buffer alocado, e é por isso que você está recebendo a violação do acesso. Isso provavelmente significa que sua matemática está errada na alocação, ou seu ponteiro RawData é do tipo errado.

Se você estiver acessando os dados brutos de um UIImage carregado, ele pode ser mapeado na memória somente leitura. Você precisaria copiar os dados em um buffer que você alocou, provavelmente.

Outras dicas

Hmm ... o que é rawdata? Talvez seja um const Digite que você não pode modificar?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top