Iphone CGBitmapContextCreate在尝试调整图像大小时出现问题
在尝试调整某些图像的大小时,尝试创建CGContextRef时遇到了一个问题: 这里有错误Iphone CGBitmapContextCreate在尝试调整图像大小时出现问题,iphone,cocoa,cocoa-touch,ipad,core-graphics,Iphone,Cocoa,Cocoa Touch,Ipad,Core Graphics,在尝试调整某些图像的大小时,尝试创建CGContextRef时遇到了一个问题: 这里有错误 Sun May 16 20:07:18 new-host.home app [7406] <Error>: Unable to create bitmap delegate device Sun May 16 20:07:18 new-host.home app [7406] <Error>: createBitmapContext: failed to create delega
Sun May 16 20:07:18 new-host.home app [7406] <Error>: Unable to create bitmap delegate device
Sun May 16 20:07:18 new-host.home app [7406] <Error>: createBitmapContext: failed to create delegate.
Sun May 16 20:07:18 new-host.home app[7406]:无法创建位图代理设备
Sun May 16 20:07:18 new-host.home应用程序[7406]:createBitmapContext:未能创建委托。
我的代码如下所示
- (UIImage*) resizeImage:(UIImage*)originalImage withSize:(CGSize)newSize {
CGSize originalSize = originalImage.size;
CGFloat originalAspectRatio = originalSize.width / originalSize.height;
CGImageRef cgImage = nil;
int bitmapWidth = newSize.width;
int bitmapHeight = newSize.height;
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(nil, bitmapWidth, bitmapHeight, 8, bitmapWidth * 4, colorspace, kCGImageAlphaPremultipliedLast);
if (context != nil) {
// Flip the coordinate system
//CGContextScaleCTM(context, 1.0, -1.0);
//CGContextTranslateCTM(context, 0.0, -bitmapHeight);
// Black background
CGRect rect = CGRectMake(0, 0, bitmapWidth, bitmapHeight);
CGContextSetRGBFillColor (context, 0, 0, 0, 1);
CGContextFillRect (context, rect);
// Resize box to maintain aspect ratio
if (originalAspectRatio < 1.0) {
rect.origin.y += (rect.size.height - rect.size.width / originalAspectRatio) * 0.5;
rect.size.height = rect.size.width / originalAspectRatio;
} else {
rect.origin.x += (rect.size.width - rect.size.height * originalAspectRatio) * 0.5;
rect.size.width = rect.size.height * originalAspectRatio;
}
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
// Draw image
CGContextDrawImage (context, rect, [originalImage CGImage]);
// Get image
cgImage = CGBitmapContextCreateImage (context);
// Release context
CGContextRelease(context);
}
CGColorSpaceRelease(colorspace);
UIImage *result = [UIImage imageWithCGImage:cgImage];
CGImageRelease (cgImage);
return result;
}
-(UIImage*)大小图像:(UIImage*)原始图像大小:(CGSize)新闻大小{
CGSize originalSize=originalImage.size;
CGFloat originalAspectRatio=originalSize.WITH/originalSize.height;
CGImageRef cgImage=nil;
int bitmapWidth=newSize.width;
int bitmapHeight=newSize.height;
CGColorSpaceRef colorspace=CGColorSpaceCreateDeviceRGB();
CGContextRef context=CGBitmapContextCreate(nil,bitmapWidth,bitmapHeight,8,bitmapWidth*4,colorspace,KCGimageAlphaPremultipledLast);
如果(上下文!=nil){
//翻转坐标系
//CGContextScaleCTM(上下文,1.0,-1.0);
//CGContextTranslateCm(上下文,0.0,-位图高度);
//黑色背景
CGRect rect=CGRectMake(0,0,位图宽度,位图高度);
CGContextSetRGBFillColor(上下文,0,0,0,1);
CGContextFillRect(上下文,rect);
//调整框的大小以保持纵横比
if(原始光谱比值<1.0){
rect.origin.y+=(rect.size.height-rect.size.width/originalAspectRatio)*0.5;
rect.size.height=rect.size.width/原始光谱比率;
}否则{
rect.origin.x+=(rect.size.width-rect.size.height*originalAspectRatio)*0.5;
rect.size.width=rect.size.height*原始光谱比率;
}
CGContextSetInterpolationQuality(上下文,kCGInterpolationHigh);
//画图
CGContextDrawImage(上下文,rect,[原始图像CGImage]);
//获取图像
cgImage=CGBitmapContextCreateImage(上下文);
//发布上下文
CGContextRelease(上下文);
}
CGCOLORSPACTERELEASE(色彩空间);
UIImage*结果=[UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
返回结果;
}
不能将nil作为CGBitmapContextCreate的第一个参数传递。为像素分配一些空间。想想那些不好的像素。看来我用的图像太大了。基本上,我是想用10倍的幅度来衡量,这似乎太过分了。总之,就是这样。hmm我在文档中读到了这样一句话:“如果你不在乎数据存储在哪里,你可以传递NULL。这将使你从管理自己的内存中解放出来,从而减少内存泄漏问题。”在我看到这句话的地方,它开始于“Mac OS X v10.6及更高版本”,我不确定这如何适用于iPhone。如果它对你有用,那就足够了。我通常会将相同的数据传递给CGImageRef,让它处理内存管理,而不是使用CGBitmapContextCreateImage再次复制像素。如果浏览iPhone的示例应用程序,您会发现至少有一个第一个参数为NULL的应用程序:请看这段代码,它是有效的:看看另一个问题中的代码,在这里为我生成一个空值:CGImageRef ref=cgitmapcontextcreateimage(位图);位图有一个内存地址,似乎已经正确创建和修改,所以我不知道那里发生了什么。不管它是否工作。。。是我的布局代码压碎了其他东西。谢谢