Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CGBitmapContextCreate在尝试调整图像大小时出现问题_Iphone_Cocoa_Cocoa Touch_Ipad_Core Graphics - Fatal编程技术网

Iphone CGBitmapContextCreate在尝试调整图像大小时出现问题

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

在尝试调整某些图像的大小时,尝试创建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 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(位图);位图有一个内存地址,似乎已经正确创建和修改,所以我不知道那里发生了什么。不管它是否工作。。。是我的布局代码压碎了其他东西。谢谢