gpt4 book ai didi

ios - 在 iOS 中以编程方式创建渐变图像

转载 作者:可可西里 更新时间:2023-11-01 05:37:09 25 4
gpt4 key购买 nike

我正在尝试处理一些直接来自设备相机的图像数据。为了理解 CGImage 结构,我使用缓冲区创建一个不适合我的图像(我知道我不应该在 Obj-C 代码中使用 C 代码,这只是为了理解)。代码如下:

int *outBuf = malloc(sizeof(int) * width * height);
for (int i = 0; i < width * height;i ++)
{
outBuf[i] = (((float)i) / ((float) width * height)) * 255.f;
}
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

CGContextRef ctx = CGBitmapContextCreate(outBuf, width, height, 8, width * 4, colorSpace, kCGImageAlphaNone);

CGImageRef img = CGBitmapContextCreateImage(ctx);
CFRelease(ref);
CGContextRelease(ctx);
free(outBuf);

CGColorSpaceRelease(colorSpace);

[view.imgView setImage: [UIImage imageWithCGImage:img]];

CGImageRelease(img);

这应该会创建从第一个像素到最后一个像素的渐变,但会产生奇怪的图形:

generated image

水平间距从何而来? (我想解决这个问题,我知道还有其他绘制渐变的可能性)提前致谢。

最佳答案

我找到了解决方案:

我正在用 int* 初始化缓冲区。每个 int 都是 4 个字节长,但是灰度图片每个像素只需要 1 个字节。将缓冲区更改为 char* 并修改 CGBitmapContextCreate 参数解决了这个问题:

CGBitmapContextCreate(outBuf, width, height, 8, width, colorSpace, kCGImageAlphaNone);

enter image description here

关于ios - 在 iOS 中以编程方式创建渐变图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14625763/

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