2010-02-27 6 views
0

Я работаю над созданием приложения для iPhone, где есть два ImageViews, и когда вы касаетесь верхней, где бы вы ни воспользовались, отображается нижняя.Как отредактировать или изменить альфа изображения (в пикселях) в Quartz?

В основном, что я хочу сделать, вырезать эллипс/округлый образ из изображения. Для этого я думал об обрезании изображения или об изменении альфа-пикселей в прямоугольнике до нуля. Я новичок в Quartz 2D Programming, поэтому не знаю, как это сделать.

Предполагая, что у меня есть:

UIImageView *topImage; 
UIImageView *bottomImage; 

Как удалить CGRect/Эллипс/RoundedRect из этих изображений. Это похоже на те лотерейные билеты, которые вы должны почесать, чтобы показать, выиграли ли вы.

ответ

1

Как правило, я пытаюсь сделать маску с пути (здесь есть закругленный прямоугольник), затем маскируя изображение с ним, как показано в apple docs. Одним из преимуществ этого является то, что при тестировании ударов все, что вам нужно сделать, это CGPathContainsPoint с той точкой, которая была затронута (как в ней будет проверяться, была ли она в видимой области изображения).

+0

Так что же я могу использовать для этого? У меня нет опыта с Quartz – gizmoitai

+0

, поэтому раздел документов, касающихся фактического отсечения, находится внизу (извините, что я забыл упомянуть об этом), но в основном создаем путь, нарисуем округленный прямоугольник, где вы хотите, закрепите контекст на путь, нарисуйте изображение (отмените путь?) и продолжайте. Я не включаю конкретный код, потому что он не нужен, просто копайте документы яблока для вызовов функций. google также. Heres что-то для закругленного пути Rect http://www.drobnik.com/touch/2010/02/drawing-rounded-rectangles/ –

+0

Я попробовал этот код: CGContextRef CTX = UIGraphicsGetCurrentContext(); \t CGRect frame = CGRectMake (100, 100, 100, 100); \t CGPathRef roundedRectPath = [self newPathForRoundedRect: радиус кадра: 5]; \t CGContextAddPath (ctx, roundedRectPath); \t CGContextClip (ctx); \t CGPathRelease (roundedRectPath); (Вместе с закругленной функцией прямого пути, которую вы отправили) Это на белом фоне, и под видом есть серое окно, поэтому я подумал, что это просто покажет серый, а не белый в рамке CGRect, но он не сделал ничего ... – gizmoitai

0

Я попробовал этот код:

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGRect frame = CGRectMake(100, 100, 100, 100); 
CGPathRef roundedRectPath = [self newPathForRoundedRect:frame radius:5]; 
CGContextAddPath(ctx, roundedRectPath); 
CGContextClip (ctx); 
CGPathRelease(roundedRectPath); 

(вместе с закругленной функцией Rect пути вы послали) Это на бел зрения и под видом есть серое окно, так что я думал, что это будет просто show grey вместо белого в рамке CGRect, но ничего не сделал ...

+0

вам нужно поместить то, что вы на самом деле хотите нарисовать между клипом контекста и выпуском пути (например, нарисуйте изображение, возможно, в «рамке») –

+0

Хорошо, я попробовал добавить это до освобождения пути: [ bottomImage.image drawInRect: frame]; Все, что он делал, было нарисовать изображение снова в рамке, очевидно ... Это не то, что я хочу сделать. Я хочу вырезать рамку изнутри изображения. Так что в середине изображения есть прозрачное пространство. – gizmoitai