к вашим данным.

й программе есть большой одномерный динамический массив, который представляет изображение FITS на диске, то есть содержит все значения пикселей изображения. Тип массивадвойной, На данный момент меня интересуют только монохромные изображения.

Так как Какао не поддерживает формат FITS напрямую, я читаю изображения с использованием библиотеки CFITSIO. Это работает - я могу манипулировать массивом по своему усмотрению и сохранять результат на диск с помощью библиотеки.

Однако сейчас я хочу отобразить изображение. Я предполагаю, что это то, что может сделать NSImage или NSView. Но ссылки на классы, похоже, не перечисляют метод, который может принять массив C и в конечном итоге вернуть объект NSImage. Самый близкий я нашел-initWithData: (NSData *), Но я не уверен на 100%, если это то, что мне нужно.

Я лаю не на том дереве? Любые указатели на класс или метод, которые могут обработать это, будут

РЕДАКТИРОВАТЬ:

Вот обновленный код. Обратите внимание, что я устанавливаю каждый пиксель на 0xFFFF. Это приводит только к серому изображению. Конечно, это всего лишь тест. При загрузке фактического файла FITS я заменяю 0xFFFF наimageArray[i * width + j], Это отлично работает в 8 битах (конечно, я делю каждое значение пикселя на 256, чтобы представить его в 8 битах).

 NSBitmapImageRep *greyRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
                                                                     pixelsWide:width
                                                                     pixelsHigh:height
                                                                  bitsPerSample:16
                                                                samplesPerPixel:1
                                                                       hasAlpha:NO
                                                                       isPlanar:NO
                                              colorSpaceName:NSCalibratedWhiteColorSpace
                                                                    bytesPerRow:0
                                                                   bitsPerPixel:16];

 NSInteger rowBytes = [greyRep bytesPerRow];
 unsigned short*pix = (unsigned short*)[greyRep bitmapData];
 NSLog(@"Row Bytes: %d",rowBytes);

if(temp.bitPix == 16) // 16 bit image
{
    for(i=0;i<height;i++)
    {
        for(j=0;j<width;j++)
        {
            pix[i * rowBytes + j] = 0xFFFF;
        }
    }
}

Я также пытался использовать Quartz2D напрямую. Это действительно производит правильное изображение, даже в 16 битах. Но как ни странно, массив данных принимает 0xFF как белый, а не 0xFFFF. Поэтому мне все еще нужно делить все на 0xFF - теряя данные в процессе. Код Quartz2D:

    short* grey = (short*)malloc(width*height*sizeof(short));
    for(int i=0;i<width*height; i++)
    {
        grey[i] = imageArray[i];
    }

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
    CGContextRef bitmapContext = CGBitmapContextCreate(grey, width, height, 16, width*2, colorSpace, kCGImageAlphaNone);
    CFRelease(colorSpace);

    CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);

    NSImage *greyImage = [[NSImage alloc] initWithCGImage:cgImage size:NSMakeSize(width, height)];

Какие-либо предложения?

Ответы на вопрос(3)

Ваш ответ на вопрос