Нарезка изображения по кодированию - PullRequest
0 голосов
/ 14 декабря 2011

Я видел несколько приложений, что-то вроде головоломки.Сначала нужно выбрать изображение, нарезать его и поместить случайным образом в квадраты 4x4 или 5x5.Один квадрат будет пустым, и пользователь может переставить их, сдвинув изображение в пустой слот.

Я знаю, как сдвинуть изображение.Но главная задача - как их разделить на меньшие изображения?Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Не уверен, что это самый эффективный способ, но я думаю, что он должен работать.

Загрузите изображение в UIImageView того размера, который нужен для среза, поэтому в качестве примера рассмотрим изображение 480x320. Позволяет нарезать это на 9 частей, сетку 3х3. Это сделало бы каждый кусок 160х106 (грубо говоря, 320 не делится поровну на 3)

Итак, создайте свой UIImageView размером 160x106, установите для свойства image полноразмерное изображение. И установите для contentMode представления изображения значение UIViewContentModeScaleAspectFill, чтобы области, не находящиеся в представлении, были обрезаны. Я не пробовал это, но я предполагаю, что это даст вам верхний левый угол вашей сетки, позиция 1,1.

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

Вариант 1

Продолжайте делать это для каждого среза, но установите рамку UIImage так, чтобы отображалась правильная часть изображения, а остальная часть обрезалась. Таким образом, ваш кадр для позиции 1,2 будет выглядеть как CGRectMake(106, 0, 106, 160) для позиции 2,2 это будет CGRectMake(106*2, 160, 106, 160) и т. Д.

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

Вариант 2

Как только вы создадите свой «срез» в UIImageView, сохраните этот контекст как файл, который вы позже загрузите в соответствующие UIImageViews.

Следующий код демонстрирует один из способов сохранить контекст UIView в UIImage.

UIGraphicsBeginImageContext(yourView.frame.size);
[[yourView layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *imageOfView = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

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

0 голосов
/ 14 декабря 2011

Мэтт Лонг обсуждает это в своей статье Подчинение CATiledLayer.

...