Пиксели интерпретации UIImage / char - PullRequest
3 голосов
/ 20 июня 2011

Следующий код переводит JPG в строку символов.

 CGImageRef imageRef = example.CGImage;
    NSData *data     = (NSData *) CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
    char *pixels     = (char *)[data bytes];

небольшой фрагмент вывода:

"GJYˇKO[ˇFJSˇILQˇKNSˇKKSˇOOYˇMMYˇNNVˇOOWˇOOWˇNNVˇLLTˇKKSˇMMUˇOOWˇJMT"

Я думаю,3 Символы вместе состоят из информации одного пикселя, верно?
И если это правда, как я могу интерпретировать эти символы (например, цвета)?

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Все это будет зависеть от цветового пространства вашего изображения.При наличии альфа-канала 4 char с будет составлять один пиксель, а без него будет 3 char с.Если это RGBA, то G - ваш R, J - ваш G, Y - ваш B и ˇ - ваш A.И если это ARGB, это G - ваш A и т. Д. Также, когда вы конвертируете свои пиксели в символ *, не забывайте следить за длиной, потому что любое значение RGBA 0 приведет к нулевому завершению.

0 голосов
/ 20 июня 2011

Вы не можете распечатать такую ​​битовую карту.Как @Joe говорит, что символы являются отдельными компонентами цвета, но любой ноль завершит строку, и есть много других проблем, пытаясь напечатать байты из NSData, как этот.

Предполагая цветовое пространство RGBA, как яподойдет так:

struct {
    char red;
    char green;
    char blue;
    char alpha;
} color;
color *bitmap = (color *)[data bytes];
for(int i = 0;i < [data length] / sizeof(color);i++) {
    NSLog(@"%d, %d, %d, %d", colors[i].red, colors[i].green, colors[i].blue, colors[i].alpha);
}

Если ваше изображение не находится в цветовом пространстве RGBA, вам необходимо настроить цветовую структуру, чтобы оно соответствовало ему.

Кроме того, этот кодне был скомпилирован, но напечатан с моей точки зрения на этот пост.Не дается никаких обещаний, что он не будет переформатировать ваш жесткий диск.Пожалуйста, подумайте, прежде чем копировать и вставлять.

...