gpt4 book ai didi

ios - CGBitmapContextCreate 为某些宽度和高度的像素返回 NULL

转载 作者:行者123 更新时间:2023-11-29 00:01:02 31 4
gpt4 key购买 nike

我有以下代码来创建新的位图图形上下文。

NSLog(@"newRect Width %f",newRect.size.width);
NSLog(@"newRect Height %f",newRect.size.height);
NSLog(@"imageRef %@",imageRef);

CGContextRef bitmap = CGBitmapContextCreate(NULL,
newRect.size.width,
newRect.size.height,
CGImageGetBitsPerComponent(imageRef),
0,
CGImageGetColorSpace(imageRef),
CGImageGetBitmapInfo(imageRef));

newRect.size.width是UIImage的原始宽度除以2的结果。newRect.size.height是UIImage原始高度除以2的结果。

但对于某些尺寸为 {3000, 2002}、{3024, 4032}、{4032, 3024} 的 UIImage 来说是可以的,并且会返回位图上下文。

但对于一些大小为 {1242, 2208} 的 UIImages。通常这些是我设备的屏幕截图并返回 NULL 值。

This is the log for failed UIImage . This is the log for succeed UIImage .

有谁可以帮助解决我的问题吗?谢谢。

最佳答案

我无法重现该问题。我建议记录所有传入参数并将日志附加到您的问题中。另请查看控制台日志,CGBitmapContextCreate 可能会在其中写入一些内容,这些内容可能会提供有关问题的见解。

更新:

您面临的问题与图像大小无关,而是与位图信息/颜色空间和每个组件的位数的组合有关。这是我在系统日志中尝试使用您提供的信息创建位图上下文时得到的内容:

CGBitmapContextCreate: unsupported parameter combination:
16 bits/component; integer;
64 bits/pixel;
RGB color space model; kCGImageAlphaLast;
kCGImageByteOrder16Little byte order;
4992 bytes/row.
Valid parameters for RGB color space model are:
16 bits per pixel, 5 bits per component, kCGImageAlphaNoneSkipFirst
32 bits per pixel, 8 bits per component, kCGImageAlphaNoneSkipFirst
32 bits per pixel, 8 bits per component, kCGImageAlphaNoneSkipLast
32 bits per pixel, 8 bits per component, kCGImageAlphaPremultipliedFirst
32 bits per pixel, 8 bits per component, kCGImageAlphaPremultipliedLast
64 bits per pixel, 16 bits per component, kCGImageAlphaPremultipliedLast
64 bits per pixel, 16 bits per component, kCGImageAlphaNoneSkipLast
64 bits per pixel, 16 bits per component, kCGImageAlphaPremultipliedLast|kCGBitmapFloatComponents
64 bits per pixel, 16 bits per component, kCGImageAlphaNoneSkipLast|kCGBitmapFloatComponents
128 bits per pixel, 32 bits per component, kCGImageAlphaPremultipliedLast|kCGBitmapFloatComponents
128 bits per pixel, 32 bits per component, kCGImageAlphaNoneSkipLast|kCGBitmapFloatComponents
See Quartz 2D Programming Guide (available online) for more information.

您可以尝试始终使用标准的东西,或者在失败的情况下,例如

CGContextRef bitmap = CGBitmapContextCreate(NULL,
newRect.size.width,
newRect.size.height,
8,
0,
CGColorSpaceCreateDeviceRGB(),
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));

或者让系统为您选择合适的上下文:

   UIGraphicsBeginImageContextWithOptions(newRect.size, false, 1.0);
CGContextRef bitmap = UIGraphicsGetCurrentContext();

// Do your drawing here

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

关于ios - CGBitmapContextCreate 为某些宽度和高度的像素返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49486407/

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