将字节数组转换为 CGImage

2024-04-07

我在无符号字符数组中有图像的灰度值,我想将其转换为CGImage这样我就可以使用它在 iOS 中显示它UIImage。 unsigned char 数组的每个值都是灰度图像的像素值。我正在使用以下代码,但图像未显示。

-(void)viewDidLoad
{
[super viewDidLoad];
NSString *filename = [[NSBundle mainBundle] pathForResource:@"rectange4obs1pro" ofType:@"pgm"];
NSFileManager *fm = [NSFileManager defaultManager];
/////////////// read file ///////////
FILE *file = fopen([filename UTF8String], "rb");
if (file == NULL) {
    NSLog(@"File Not Found");
    return;
}
char name[20], secondline[10];
int w=0, h=0, colors=0;
fscanf(file, "%s", name);
fscanf(file, "%s", secondline);
fscanf(file, "%d %d %d", &w, &h, &colors);
printf("%d %d\n", w, h);
unsigned char * imagedata = (unsigned char *) malloc(sizeof(unsigned char)*w*h);
fseek(file, 1, SEEK_CUR);
int i=0;
while (!feof(file)) {
    imagedata[i] = getc(file);
    i++;
}
////////////////// end read file /////////////

CGColorSpaceRef colorSpace= CGColorSpaceCreateDeviceGray();
CGContextRef bitmapContext=CGBitmapContextCreate(imagedata, w, h, 8, w, colorSpace,  kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
CFRelease(colorSpace);
free(imagedata);
CGImageRef cgImage=CGBitmapContextCreateImage(bitmapContext);
CGContextRelease(bitmapContext);

UIImage * newimage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
[imageview setImage:newimage];
}

我在终端上收到的消息是:

CGBitmapContextCreate:不支持的参数组合:8 个整数 位/组件; 16 位/像素; 1-分量色彩空间; kCGImageAlphaNoneSkipLast; 100 字节/行。 1 月 31 日 15:25:50 sumits-mbp.bsb.igloonet check_visibility_image[4210] : CGBitmapContextCreateImage:无效上下文 0x0。这是一个严重的 错误。此应用程序或其使用的库正在使用无效的 环境,从而导致整体退化 系统稳定性和可靠性。此通知是出于礼貌:请 解决这个问题。在即将到来的更新中它将成为致命错误。


该代码现在可以工作,我遇到了问题。

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *filename = [[NSBundle mainBundle] pathForResource:@"10CamsHGallery" ofType:@"pgm"];
NSFileManager *fm = [NSFileManager defaultManager];
/////////////// read file ///////////
FILE *file = fopen([filename UTF8String], "rb");
if (file == NULL) {
    NSLog(@"File Not Found");
    return;
}
char name[20], secondline[10];
int w=0, h=0, colors=0;
fscanf(file, "%s", name);
fscanf(file, "%s", secondline);
fscanf(file, "%d %d %d", &w, &h, &colors);
//printf("%d %d\n", w, h);
unsigned char * imagedata = (unsigned char *) malloc(sizeof(unsigned char)*w*h);
fseek(file, 1, SEEK_CUR);
int i=0;
while (!feof(file)) {
    int val = getc(file);
    imagedata[i] = val;
    i++;
}
////////////////// end read file /////////////

CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray();
CFDataRef rgbData = CFDataCreate(NULL, imagedata, w * h);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(rgbData);
CGImageRef rgbImageRef = CGImageCreate(w, h, 8, 8, w , colorspace, kCGBitmapByteOrderDefault, provider, NULL, true, kCGRenderingIntentDefault);
CFRelease(rgbData);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorspace);
UIImage * newimage = [UIImage imageWithCGImage:rgbImageRef];
imageview.frame = CGRectMake(imageview.frame.origin.x,imageview.frame.origin.y, w, h);
[imageview setImage:newimage];
CGImageRelease(rgbImageRef);

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字节数组转换为 CGImage 的相关文章

随机推荐

  • 相邻弹性盒容器中的内容垂直对齐

    我有多个项目说卡片 这些卡片需要水平堆叠 并且高度需要相同 这正在发生在我身上 每张卡片都有图像 文本和按钮 每张卡片的图像和文本应采用任何卡片的最大高度 以便它们正确对齐 这不会发生在我身上 如果图像和文本正确对齐 则按钮将始终在底部的每
  • Firestore安全规则:在文档的数组中搜索用户的ID

    首先 对不起我糟糕的英语 这不是我的母语 我正在 Firebase 中使用 Firestore 数据库构建一个简单的应用程序 在我的应用程序中 用户是小组的成员 他们可以访问其他用户的数据 为了不查询太多文档 每个用户一个 在组文档的子集合
  • 循环 AVMutableCompositionTrack

    我身上有两个音轨 我将它们相互组合起来 如下所示 AVMutableComposition composition AVMutableComposition alloc init AVMutableCompositionTrack comp
  • Python 获取系统环境变量 Linux

    我已经暴露了一个系统环境变量KEY1有价值VALUE1 in etc profile 我知道 我知道 这可能很糟糕 如果我现在在我的壳里 echo KEY1 VALUE1 但当我这样做时 python c import os print o
  • Rails 是否有“未经授权”的例外情况?

    我正在编写一个应用程序 它使用普通的旧 Ruby 对象 PORO 从控制器中抽象出授权逻辑 目前 我有一个名为的自定义异常类NotAuthorized that I rescue from在控制器级别 但我很想知道 Rails 4 是否已经
  • 在 irb 中导航命令行的键盘快捷键

    我看过用户运行 irb 的截屏视频 当他们编写文本时 他们会跳转到行的开头 结尾以及单词的开头 结尾 用于执行此操作的击键是什么 这取决于所使用的外壳吗 Ctrl A gt Move to beginning of line Ctrl E
  • 同一解决方案中的 NuGet 引用

    以前可能已经问过这个问题 如果是 请提供链接 我正在为我的公司开发一套 核心 解决方案 我们在此解决方案集中有几个不同的项目 每个项目在构建时都会变成一个 NuGet 包 以便在我们的其他解决方案项目中使用 我发现我想通过 NuGet 引用
  • Swift Firebase Storage 如何检索名称未知(NSUUID)的图像

    我正在制作一个函数来检索 url 作为用户图像 然而 我的上传图像名称功能是由NSUUID创建的 因此 我不知道每个用户个人资料图片的名称是什么 如何改进我的代码以获得每个用户的用户 imgae 而不是硬编码 img 名称 func get
  • RStudio 通常在空白屏幕中启动;需要 sudo 才能工作

    在新安装的 x64 Ubuntu GNOME 16 04 和 R v3 3 2 上运行的 RStudio v1 0 136 在空白屏幕中启动 终端输出如下 参见屏幕截图 TypeError undefined is not an objec
  • Pydoc 没有看到文档字符串?

    显然我在这里错过了一些严重的事情 这是我的测试程序 Doc and nothing but doc class TestMe object class documentation goes here def testFunc self Fu
  • 应忽略听到“元素‘行为’具有无效子元素”,但因此阻止更新服务引用[重复]

    这个问题在这里已经有答案了 可能的重复 元素 behavior 在 wcf app config 中具有无效的子元素 myFaultExtension https stackoverflow com questions 4677377 th
  • 如何为 Material UI React 添加 RTL 支持

    我正在构建一个 LTR 应用程序 并且想添加 RTL 支持 该应用程序基于 Material UI React 之上 由于我使用的是 CSS Flex Box 因此我能够将应用程序旋转到 RTL 只需将 dir rtl 添加到主体即可 我还
  • 如何从这个字符串中解析出时间戳?

    我有这个示例字符串 Sample string 1 A 1 1 B 1 I 2 f 0 p 1 d 2010 07 21T08 52 05 222ZKHBDGSLKHFBDSLKFGNIF XLGCREWIGMEWCERG Sample s
  • 苹果推送通知服务统计(apns)

    是否可以找到相关信息Apple Push Notification服务使用情况 有多少人正在使用它们 有多少人正在拒绝它们 或者也许 有人已经掌握了此类信息 苹果没有提供大量关于有多少用户实际接受 拒绝推送通知的信息 但您可以通过比较总安装
  • Twitter Bootstrap 单选框/复选框 - 如何放置字形图标

    使用 TB 是否可以设置单选按钮或复选框的样式 使其显示字形而不是单选按钮或复选框的默认样式 我想用一个glyphicon glyphicon star表示未选中 然后glyphicon glyphicon star empty来表示已检查
  • 这是seaborn.lineplot 色调参数中的错误吗?

    通过此代码片段 我期望得到一个每种色调一条线的线图 它具有以下不同的值 1 5 10 20 40 import math import pandas as pd import seaborn as sns sns set style whi
  • Javascript 闭包解释 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 问题 闭包似乎有很多好处 但有哪些缺
  • 如何删除动态数组?

    我在这个问题的帮助下构建了一个数组 如何在 C 中使用 new 声明二维数组 https stackoverflow com questions 936687 how do i declare a 2d array in c using n
  • “tuple”对象不支持项目分配

    我正在使用 PIL 库 我正在尝试使图像看起来更红 这就是我所拥有的 from PIL import Image image Image open balloon jpg pixels list image getdata for pixe
  • 将字节数组转换为 CGImage

    我在无符号字符数组中有图像的灰度值 我想将其转换为CGImage这样我就可以使用它在 iOS 中显示它UIImage unsigned char 数组的每个值都是灰度图像的像素值 我正在使用以下代码 但图像未显示 void viewDidL