Не осуждаемая замена для NSCalibratedBlackColorSpace? - PullRequest
0 голосов
/ 10 апреля 2010

Я реализую свой собственный 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).

Ответы [ 3 ]

1 голос
/ 10 апреля 2010

Я бы создал калиброванный серый CGColorSpace с замененными белыми и черными точками, затем создаст CGImage с растровыми данными и этим цветовым пространством. Если вы хотите использовать растровое изображение, просто создать один из них вокруг CGImage .

1 голос
/ 11 апреля 2010
1 голос
/ 10 апреля 2010

Кажется, что только что был удален без замены. Исправление, вероятно, состоит в том, чтобы просто инвертировать все биты и использовать NSCalibratedWhiteColorSpace.

...