我正在实现自己的NSBitmapImageRep
(以绘制PBM图像文件)。为了绘制它们,我使用了NSDrawBitmap()
并将其传递给NSCalibratedBlackColorSpace
(因为黑色的位是1,白色的位是0)。
麻烦的是,我收到以下警告:
warning: 'NSCalibratedBlackColorSpace' is deprecated
但是,我找不到合适的替代品。
NSCalibratedWhiteColorSpace
给了我一个倒置的图像,似乎没有办法让NSDrawBitmap()
使用我可以将其创建为与CGColorSpaceRef
等效的NSColorSpace
或NSCalibratedBlackColorSpace
。我已经找到了(警告)一种关闭警告的方法(因此,我仍然可以通过传递
@"NSCalibratedBlackColorSpace"
而不是符号常量来生成无警告信息,直到替换可用),但我宁愿应用正确的修复方法。有人有主意吗?
好,所以我尝试了
NSData* pixelData = [[NSData alloc] initWithBytes: bytes +imgOffset length: [theData length] -imgOffset];
CGFloat black[3] = { 0, 0, 0 };
CGFloat white[3] = { 100, 100, 100 };
CGColorSpaceRef calibratedBlackCS = CGColorSpaceCreateCalibratedGray( white, black, 1.8 );
CGDataProviderRef provider = CGDataProviderCreateWithCFData( UKNSToCFData(pixelData) );
mImage = CGImageCreate( size.width, size.height, 1, 1, rowBytes, calibratedBlackCS, kCGImageAlphaNone,
provider, NULL, false, kCGRenderingIntentDefault );
CGColorSpaceRelease( calibratedBlackCS );
但它仍然是倒置的。我也尝试过在上面交换黑色/白色,没有改变任何东西。我误解了CIE三刺激色值的东西吗?大多数文档似乎都假设您知道这是什么,或者愿意变换一段矩阵数学来弄清楚什么是什么颜色。或者其他的东西。
我有点想避免必须一次触摸所有数据并将其取反,但是现在看来这是最好的选择(/ me解压缩了他的循环和xor运算符)。
最佳答案
它似乎刚刚被删除,没有替代品。解决方法可能是将所有位取反并使用NSCalibratedWhiteColorSpace
。