У меня есть CIImage, позволяет сказать, 500x250 пикселей, и я пытаюсь плитке его, так что он станет 1000x500 картинка, с двумя рядами двух снимков каждого, как это:Как использовать CIAffineTile на какао?
Я пытаюсь сделать это с помощью CIAffineTile на какао (я не уверен, что это самый подходящий фильтр для этого).
Как и ожидалось, документация, поступающая от Apple, ужасно расплывчата и зашифрована.
Видимо фильтр должен называться по-разному от прошивки и OSX, но части OSX загадочно.
Это код, у меня есть:
Что я делаю, я создаю плитка фильтр, чем обрезать его в два раза размер изображения в каждом направлении + 2, чтобы создать 2 пикселя пространство между ними.
// the picture has to translate this amount?
CGAffineTransform translate = CGAffineTransformMakeTranslation(pictureWidth+2, pictureHeight+2);
CIFilter *filterTile = [CIFilter filterWithName:@"CIAffineTile"];
[filterTile setValue:[NSValue valueWithBytes:&translate
objCType:@encode(CGAffineTransform)]
forKey:@"inputTransform"];
CIVector *cropRect =[CIVector vectorWithX:0
Y:0
Z:2 * pictureWidth+2
W:2 * pictureHeight+2];
CIFilter *crop = [CIFilter filterWithName:@"CICrop"];
[crop setValue:[filterTile outputImage] forKey:@"inputImage"];
[crop setValue:cropRect forKey:@"inputRectangle"];
Этот результат является неправильным CIImage. То, что я вижу это:
Что случилось с преобразованием? Разве это не должно было предполагаться количество пикселей, которые изображение должно перевести на плитку?
Самая странная часть всего: преобразование может быть любым, даже преобразованием идентичности, и результат будет таким же.
Я пытался угадать, как сделать это на OSX и представить себе что-то вроде этого:
NSAffineTransform *translate = [NSAffineTransform transform];
[translate translateXBy:(pictureWidth + 2) yBy:(pictureHeight + 2];
CIFilter *filterTile = [CIFilter filterWithName:@"CIAffineTile"];
[filterTile setValue:imagem forKey:@"inputImage"];
но закончилась на 90 градусов против часовой стрелки вращают (???) изображение.
нормально, но почему изображение появляется сдвинуто, даже если аффинная тождественный? Как сделать первое изображение начинается с 0,0 и оттуда оттуда в обоих направлениях. Изображение уже сдвинуто. Посмотрите на мою последнюю фотографию. – SpaceDog
FWIW, этот код работал для меня на симуляторе CGAffineTransform xform = CGAffineTransformIdentity; NSValue * xformObj = [Значение NSValueWithBytes: & xform objCType: @encode (CGAffineTransform)]; image = [image imageByApplyingFilter: @ "CIAffineTile" withInputParameters: @ {kCIInputTransformKey: xformObj}]; image = [image imageByCroppingToRect: CGRectMake (0,0,2 * pictureWidth + 2, 2 * pictureHeight + 2)]; –