gpt4 book ai didi

iPhone - CGImageCreateWithImageInRect 旋转一些相机胶卷图片

转载 作者:行者123 更新时间:2023-12-03 18:36:02 25 4
gpt4 key购买 nike

我正在开发 iPhone 的像素化应用程序。由于用 iPhone 4 相机拍摄的照片太大,因此应用程序在更新像素化图片时运行速度非常慢,因此我尝试先创建图片的图 block ,然后只更新图 block 而不是孔图片。

构建图 block 时,它适用于以横向模式(2592 x 1936 像素)和低分辨率图片拍摄的相机胶卷照片,但不适用于以纵向模式(1936 x 2592 像素)拍摄的照片。

从原始图像中剪切图 block 的代码如下所示:

for (i = 0; i < NrOfTilesPerHeight; i++) {
for (j = 0; j < NrOfTilesPerWidth; j++) {
CGRect imageRect = CGRectMake(j*TILE_WIDTH, i*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);
CGImageRef image = CGImageCreateWithImageInRect(aux.CGImage, imageRect);
UIImage *img = [UIImage imageWithCGImage:image];
UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
}
}

问题是用这些图 block 创建的图像会逆时针旋转 90 度角。

非常感谢,安德烈

最佳答案

这是因为没有考虑 imageOrientation。

有一个类似的问题( Resizing UIimages pulled from the Camera also ROTATES the UIimage? ),我对代码进行了一些修改以处理裁剪图像。

你在这里:

static inline double radians (double degrees) {return degrees * M_PI/180;}

+(UIImage*)cropImage:(UIImage*)originalImage toRect:(CGRect)rect{

CGImageRef imageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect);

CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
CGContextRef bitmap = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);

if (originalImage.imageOrientation == UIImageOrientationLeft) {
CGContextRotateCTM (bitmap, radians(90));
CGContextTranslateCTM (bitmap, 0, -rect.size.height);

} else if (originalImage.imageOrientation == UIImageOrientationRight) {
CGContextRotateCTM (bitmap, radians(-90));
CGContextTranslateCTM (bitmap, -rect.size.width, 0);

} else if (originalImage.imageOrientation == UIImageOrientationUp) {
// NOTHING
} else if (originalImage.imageOrientation == UIImageOrientationDown) {
CGContextTranslateCTM (bitmap, rect.size.width, rect.size.height);
CGContextRotateCTM (bitmap, radians(-180.));
}

CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.width, rect.size.height), imageRef);
CGImageRef ref = CGBitmapContextCreateImage(bitmap);

UIImage *resultImage=[UIImage imageWithCGImage:ref];
CGImageRelease(imageRef);
CGContextRelease(bitmap);
CGImageRelease(ref);

return resultImage;
}

关于iPhone - CGImageCreateWithImageInRect 旋转一些相机胶卷图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5076617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com