Я реализую свой собственный 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 tristimulus? Большинство документов, кажется, предполагают, что вы знаете, что это такое, или готовы преобразовать часть математической математики, чтобы выяснить, что это за цвет. Или что-то.
Хотелось бы не касаться всех данных один раз и инвертировать их, но сейчас это кажется лучшим выбором (/ me распаковывает его циклы и операторы xor).