Я думаю, что мой алгоритм где-то имеет ошибочную логику.Вызов двух функций должен вернуть одно и то же изображение, но это не так!Кто-нибудь может увидеть, где моя логика идет не так?
Эти функции используются на PNG-изображениях, я обнаружил, что они хранят цвета следующим образом: АЛЬФА, КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ.Повторно для всего изображения.«пиксели» - это просто длинный массив этих значений (например, список).
Мое намерение состоит в том, чтобы сделать фильтр нижних частот на изображении, что будет намного проще, если вы вместо этого используете двумерный массив /матрица изображения.
// loading pixels
UIImage *image = imageView.image;
CGImageRef imageRef = image.CGImage;
NSData *data = (NSData *)CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
char *pixels = (char *)[data bytes];
// editing image
char** matrix = [self mallocMatrix:pixels withWidth:CGImageGetWidth(imageRef) andHeight:CGImageGetHeight(imageRef)];
char* newPixels = [self mallocMatrixToList:matrix withWidth:CGImageGetWidth(imageRef) andHeight:CGImageGetHeight(imageRef)];
pixels = newPixels;
и функции выглядят следующим образом:
- (char**)mallocMatrix:(char*)pixels withWidth:(int)width andHeight:(int)height {
char** matrix = malloc(sizeof(char*)*height);
int c = 0;
for (int h=0; h < height; h++) {
matrix[h] = malloc(sizeof(char)*width*4);
for (int w=0; w < (width*4); w++) {
matrix[h][w] = pixels[c];
c++;
}
}
return matrix;
}
- (char*)mallocMatrixToList:(char**)matrix withWidth:(int)width andHeight:(int)height {
char* pixels = malloc(sizeof(char)*height*width*4);
int c = 0;
for (int h=0; h < height; h++) {
for (int w=0; w < (width*4); w++) {
pixels[c] = matrix[h][w];
c++;
}
}
return pixels;
}
Редактировать: Исправлено malloc, как указано на постерах.Алгоритм немного упрощен.