2014-02-06 15 views
0

У меня есть файл, представляющий пиксельные данные - он находится в специальном формате, поэтому мне нужно прочитать отдельные байты, которые представляют данные RGB для каждого пикселя, составляющего изображение. Я знаю, как это сделать.Как рисовать пиксели в приложении OSX?

Что класс делать я использую, который позволил бы мне задать отдельные пиксели, составляющие изображения, а затем позвольте мне сделать его в окне приложения

Я предполагаю, что есть какое-то «Изображение» объект, в котором я мог бы указать отдельные пиксели?

Вот что, я думаю, мне нужно сделать: 1. В Xcode создайте приложение для какао. 2. Затем в окне, которое создано по умолчанию, я должен иметь возможность добавить какой-то «вид», в котором я могу отобразить «образ». 3. В этом «изображении» я должен иметь возможность указывать значения RGB для каждого пикселя в прямоугольнике, представляющем «изображение».

С чего начать? Мне удобнее кодировать Objective-C, но я никогда не писал приложение с пользовательским интерфейсом или где мне приходилось писать собственный код чертежа.

ответ

2

Если байты в формате, распознанном CoreGraphics, вы можете просто прочитать байты в буфере, таком как NSData, и создать из него растровое изображение. Это изображение, которое вы можете отобразить. Например:

unsigned char *fftFrames = (unsigned char *) [imageData bytes]; // data from a FFT operation on sound; grayscale in original; i want color. 

unsigned char *imgData[3]; 
imgData[0] = &fftFrames[(int)start]; 
imgData[1]=imgData[0]+((int)width*(int)height); 
imgData[2]=imgData[1]+((int)width*(int)height); 

NSBitmapImageRep *sonagramImageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:imgData 
    pixelsWide:*size 
    pixelsHigh:height 
    bitsPerSample:8 
    samplesPerPixel:3 
    hasAlpha:NO 
    isPlanar:YES 
    colorSpaceName:NSDeviceRGBColorSpace 
    bytesPerRow:width bitsPerPixel:8]; 

В приведенном выше примере данные поступают в оттенках серого от операции FFT, я затем дублировать исходные данные для заполнения красного, зеленого и синего цветов, чтобы сделать некоторые интересные вещи CIFilter позже. В конце я получаю изображение следующим образом: http://www.ecoobs.com/img/her-bcAn2-Ft3.png (яркое изображение в левом окне создается таким образом, называемым сонаграммой).

он непосредственно нарисован в NSView.

Это выше всего один путь. Это можно сделать очень точно, используя кварц. Подход тот же.

+0

Мне очень жаль, но я не понимаю, что вы делаете там наверху. Мой файл находится в настраиваемом формате, поэтому мне удалось создать триплеты NSArray (RGB). Есть ли способ создать изображение, указав цвет каждого пикселя? –

+0

не создавайте 'NSArray', но читайте свои данные в одном c-массиве и используйте это как данные для создания изображения. Как и выше в моем примере, где я использую массив без знака, содержащий мои значения rgb (целые числа от 0 до 255). Этот массив задает сначала красный, затем зеленый, а затем синий для каждого пикселя (строки и столбцы просто связаны друг с другом). – Volker

+0

У меня уже есть NSArray, но я могу скопировать его в C-массив. Но как указать значения RGB в C-массиве? –

0

Возможно, посмотрите на NetPBM, вы можете легко преобразовать свои данные в формат NetPBM, а затем использовать любую программу, которую вы хотите отобразить или преобразовать в другие форматы. Документация here.

Вот пример файл для 4х изображений - как вы можете видеть, что это ASCII и легко для чтения/записи:

P3 
# feep.ppm 
4 4 
15 
0 0 0 0 0 0 0 0 0 15 0 15 
0 0 0 0 15 7 0 0 0 0 0 0 
0 0 0 0 0 0 0 15 7 0 0 0 
15 0 15 0 0 0 0 0 0 0 0 0 
Смежные вопросы