在 iPad 中将一张图片分成两半
Spliting a UIImage in half issue in iPad
我有一个有很多按钮的视图,需要从中打印出来,目前我将我的视图转换为图像并直接打印它并且效果很好,现在根据要求我必须拆分图像垂直分成两半。我只需要 iPad。下面是我如何执行此操作的代码。
UIImage *myImage = [Utilities changeViewToImage:_mainView withBounds:viewSize];
NSLog(@"%f-%f", myImage.size.width, myImage.size.height); //409.000000-563.000000 (same for both normal iPad and retina)
CGImageRef tmpImgRef = myImage.CGImage;
CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width, myImage.size.height/2));
topImage = [UIImage imageWithCGImage:topImgRef];
CGImageRelease(topImgRef);
CGImageRef bottomImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, myImage.size.height / 2.0, myImage.size.width, myImage.size.height / 2.0));
bottomImage = [UIImage imageWithCGImage:bottomImgRef];
CGImageRelease(bottomImgRef);
这在 iPad 7.1 上工作得非常好,我在 topImage 中得到了一半的图像,其余部分在 bottomImage 中。但是当我 运行 它在 iPad 空气或视网膜上时,我只得到 topImage 的 1/4,我不得不通过加倍宽度和相同的高度来更改 topimage 的框架设置以获得类似的结果CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width, myImage.size.height/2));
但是图片又大了,我又得再缩小一次,所以目前我得检查它是正常的iPad还是视网膜并相应地调整,有没有更好的方法来做到这一点这样它就可以在正常 iPad 和 retina/air?
上工作
我能够在创建框架时使用 image.scale 选项解决这个问题,然后根据我的需要调整生成的图像的大小。
CGImageRef tmpImgRef = myImage.CGImage;
CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width*myImage.scale, (myImage.size.height*myImage.scale)/2));
topImage = [UIImage imageWithCGImage:topImgRef];
CGImageRelease(topImgRef);
CGImageRef bottomImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, (myImage.size.height*myImage.scale) / 2.0, myImage.size.width*myImage.scale, (myImage.size.height*myImage.scale) / 2.0));
bottomImage = [UIImage imageWithCGImage:bottomImgRef];
CGImageRelease(bottomImgRef);
我有一个有很多按钮的视图,需要从中打印出来,目前我将我的视图转换为图像并直接打印它并且效果很好,现在根据要求我必须拆分图像垂直分成两半。我只需要 iPad。下面是我如何执行此操作的代码。
UIImage *myImage = [Utilities changeViewToImage:_mainView withBounds:viewSize];
NSLog(@"%f-%f", myImage.size.width, myImage.size.height); //409.000000-563.000000 (same for both normal iPad and retina)
CGImageRef tmpImgRef = myImage.CGImage;
CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width, myImage.size.height/2));
topImage = [UIImage imageWithCGImage:topImgRef];
CGImageRelease(topImgRef);
CGImageRef bottomImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, myImage.size.height / 2.0, myImage.size.width, myImage.size.height / 2.0));
bottomImage = [UIImage imageWithCGImage:bottomImgRef];
CGImageRelease(bottomImgRef);
这在 iPad 7.1 上工作得非常好,我在 topImage 中得到了一半的图像,其余部分在 bottomImage 中。但是当我 运行 它在 iPad 空气或视网膜上时,我只得到 topImage 的 1/4,我不得不通过加倍宽度和相同的高度来更改 topimage 的框架设置以获得类似的结果CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width, myImage.size.height/2));
但是图片又大了,我又得再缩小一次,所以目前我得检查它是正常的iPad还是视网膜并相应地调整,有没有更好的方法来做到这一点这样它就可以在正常 iPad 和 retina/air?
上工作我能够在创建框架时使用 image.scale 选项解决这个问题,然后根据我的需要调整生成的图像的大小。
CGImageRef tmpImgRef = myImage.CGImage;
CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width*myImage.scale, (myImage.size.height*myImage.scale)/2));
topImage = [UIImage imageWithCGImage:topImgRef];
CGImageRelease(topImgRef);
CGImageRef bottomImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, (myImage.size.height*myImage.scale) / 2.0, myImage.size.width*myImage.scale, (myImage.size.height*myImage.scale) / 2.0));
bottomImage = [UIImage imageWithCGImage:bottomImgRef];
CGImageRelease(bottomImgRef);