Como aumentar/diminuir um char não assinado?
-
20-09-2019 - |
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
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?