Values
добирается ICollection
содержащий значения Вашего словаря. Как подразумевается определением Вашего словаря, это может быть определено как ICollection
набор. Таким образом, если Вы действительно хотите IList
, используйте решение spacedog .
, Если то, что Вы действительно хотите, является плоским 'IList', затем нет никакого другого решения, чем цикличное выполнение через каждое значение:
IList l=new List();
foreach (IList v in myDictionary.Values)
l.AddRange(v);
Примечание, что это столь чрезвычайно неэффективно, что необходимо думать снова об использовании словаря для того, чего Вы пытаетесь достигнуть.
UIImage* bottomImage = [UIImage imageNamed:@"bottom.png"];
UIImage* topImage = [UIImage imageNamed:@"top.png"];
UIImageView* imageView = [[UIImageView alloc] initWithImage:bottomImage];
UIImageView* subView = [[UIImageView alloc] initWithImage:topImage];
subView.alpha = 0.5; // Customize the opacity of the top image.
[imageView addSubview:subView];
UIGraphicsBeginImageContext(imageView.frame.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* blendedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[subView release];
[imageView release];
[self doWhateverIWantWith: blendedImage];
Не могли бы вы подробно объяснить, что вы имеете в виду под «похоже, не работает? " Он рисует только одно изображение или другое изображение? Рисовать черным? Шум? Сбой? Почему вы выбрали kCGBlendModeSourceIn
; какого эффекта вы пытаетесь достичь (есть десятки способов смешать изображения)? У какого-либо из ваших изображений уже есть альфа-канал?
Я предполагаю, что вы пытаетесь смешать два изображения так, чтобы у каждого было 50% непрозрачности? Используйте для этого CGContextSetAlpha ()
вместо CGContextSetBlendMode ()
.
Вы можете использовать drawInRect:
или drawAtPoint:
для UIImage
вместо CGContextDrawImage (они рисуют в текущем контексте) . Их использование дает вам какую-либо разницу в выводе?
Также может быть полезно убедиться, что значения UIImage *
, которые вы получаете обратно из imageNamed:
, действительны.
Это то, что я сделал в своем приложении, аналогично приложению Тайлера, но без UIImageView
:
UIImage *bottomImage = [UIImage imageNamed:@"bottom.png"];
UIImage *image = [UIImage imageNamed:@"top.png"];
CGSize newSize = CGSizeMake(width, height);
UIGraphicsBeginImageContext( newSize );
// Use existing opacity as is
[bottomImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Apply supplied opacity
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeNormal alpha:0.8];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Если изображение уже имеет непрозрачность, вам не нужно ее устанавливать (как в bottomImage
), в противном случае вы можете установить ее (как с image
).
Blending with alpha
UIGraphicsBeginImageContext(area.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextRetain(context);
// mirroring context
CGContextTranslateCTM(context, 0.0, area.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
for (...) {
CGContextBeginTransparencyLayer(context, nil);
CGContextSetAlpha( context, alpha );
CGContextDrawImage(context, area, tempimg.CGImage);
CGContextEndTransparencyLayer(context);
}
// get created image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGContextRelease(context);
UIGraphicsEndImageContext();