多削波Rects到核芯显卡创建拼贴
-
19-09-2019 - |
题
我创建一个拼贴与来自其它图像元素结合。下面是一些ASCII艺术来解释我在做什么:
Given images A, B and C,
AAA, BBB, CCC
AAA, BBB, CCC
AAA, BBB, CCC
I take part of A, part of B and part of C as columns:
Axx, xBx, xxC
Axx, xBx, xxC
Axx, xBx, xxC
...and combine them in one image like this:
ABC
ABC
ABC
where the first 1/3rd of the image is a colum of A's pic, the middle is a column of B's pic and the last is a column of C's pic.
我有一些代码编写的,但它只是显示第一列,而不是休息......我觉得我必须以某种方式清除剪裁,BT我不知道怎么做,或是否这甚至是最好的办法。
+ (UIImage *)collageWithSize:(NSInteger)size fromImages:(NSArray *)images {
NSMutableArray *selectedImages = [NSMutableArray array];
[selectedImages addObjectsFromArray:images];
// use the selectedImages for generating the thumbnail
float columnWidth = (float)size/(float)[selectedImages count];
//create a context to do our clipping in
UIGraphicsBeginImageContext(CGSizeMake(size, size));
CGContextRef currentContext = UIGraphicsGetCurrentContext();
for (int i = 0; i < [selectedImages count]; i++) {
// get the current image
UIImage *image = [selectedImages objectAtIndex:i];
//create a rect with the size we want to crop the image to
CGRect clippedRect = CGRectMake(i*columnWidth, 0, columnWidth, size);
CGContextClipToRect(currentContext, clippedRect);
//create a rect equivalent to the full size of the image
CGRect drawRect = CGRectMake(0, 0, size, size);
//draw the image to our clipped context using our offset rect
CGContextDrawImage(currentContext, drawRect, image.CGImage);
}
//pull the image from our cropped context
UIImage *collage = UIGraphicsGetImageFromCurrentImageContext();
//pop the context to get back to the default
UIGraphicsEndImageContext();
//Note: this is autoreleased
return collage;
}
我在做什么错了?
PS图像被绘制上下颠倒了。
解决方案
CGContextClipToRect
相交与设置参数的当前剪辑矩形。所以,你把它叫做第二次时,实际上是把你的裁剪区域不了了之。
有没有办法恢复剪切区域而不恢复图形状态。所以,拨打电话,在你的循环顶部和呼叫在底部CGContextSaveGState
到CGContextRestoreGState
。
在倒置部分可通过调节电流的变换矩阵是固定的:调用CGContextTranslateCTM
移动原点,然后CGContextScaleCTM
翻转y轴
其他提示
在上下颠倒的图像可以通过调用以下方法进行修正:
CGImageRef flip (CGImageRef im) {
CGSize sz = CGSizeMake(CGImageGetWidth(im), CGImageGetHeight(im));
UIGraphicsBeginImageContextWithOptions(sz, NO, 0);
CGContextDrawImage(UIGraphicsGetCurrentContext(),
CGRectMake(0, 0, sz.width, sz.height), im);
CGImageRef result = [UIGraphicsGetImageFromCurrentImageContext() CGImage];
UIGraphicsEndImageContext();
return result;
}
从下面的代码采取的帮助,以其中u会把这个代码:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(leftRect.size.width, leftRect.size.height), NO, 0);
CGContextRef con = UIGraphicsGetCurrentContext();
CGContextDrawImage(con, leftRect,flip(leftReference));
不隶属于 StackOverflow