我有一个16位灰度图像。我试过.png和.tif。 .tif有点工作。我有以下代码:
CGDataProviderRef l_Img_Data_Provider = CGDataProviderCreateWithFilename( [m_Name cStringUsingEncoding:NSASCIIStringEncoding] );
CGImageRef l_CGImageRef = CGImageCreate( m_Width, m_Height, 16, 16, m_Width * 2,
CGColorSpaceCreateDeviceGray(), kCGBitmapByteOrder16Big, l_Img_Data_Provider, NULL, false, kCGRenderingIntentDefault );
test_Image = [[UIImage alloc] initWithCGImage:l_CGImageRef];
[_test_Image_View setImage:test_Image];
这会产生以下图像: faulty gradient
正如你所看到的,在图像的开头似乎存在一个问题(它是否可以尝试使用标题中的字节数据?),并且图像偏移了大约五分之一(稍微难一点)看,看左边和右边,有一条距离右边大约五分之一的暗线。
我的目标是将其转换为金属质感并从那里使用它。还有问题。看起来像字节顺序问题,但也许我们可以回过头来看。
戴夫
答案 0 :(得分:1)
CGDataProvider
不知道它存储的数据格式。它仅用于处理通用数据:
" CGDataProvider头文件声明了一个提供的数据类型 Quartz函数包含数据。数据提供者对象抽象出来 数据访问任务,消除了管理应用程序的需要 数据通过原始内存缓冲区。"
由于CGDataProvider
是通用的,因此您必须使用CGImageCreate
参数提供图像数据的格式。 PNG和JPG有自己的CGImageCreateWith..
函数来处理编码数据。
您的示例中的CGImage参数正确描述了16位灰度原始字节格式,但没有关于TIF编码的内容,因此我猜您猜测您看到的损坏像素来自文件头是正确的。
在iOS上可能还有其他方法可以加载16位灰度图像,但是要使用该方法(或非常类似的Metal方法),您需要从TIF文件中解析图像字节并将其传递给函数,或者创建另一种存储和解析图像数据的方法。