一个人如何在OSX应用程序中绘制像素



我有一个代表像素数据的文件 - 它是一种自定义格式,因此我需要读取代表每个构成图像的每个像素的RGB数据的单个字节。我知道该怎么做。

我使用什么类,可以让我指定构成图像的单个像素,然后让我在应用程序的窗口

的窗口中渲染

我假设有某种"图像"对象,其中我可以指定单个像素?

这是我认为我需要做的:1.在Xcode中创建一个可可应用程序。2.然后在默认情况下创建的窗口中,我必须能够添加某种"视图",在其中我可以呈现" image"。3.在该"图像"中,我应该能够指定代表"图像"的矩形中每个像素的RGB值。

我从哪里开始?我很舒适地使用Objective-C编码,但是我从来没有用UI编写应用程序,或者我不得不编写自定义绘图代码。

如果字节的格式是由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(左窗口中鲜艳的映像是以这种方式产生的,称为Sonagram)。

直接将其绘制到NSView中。

这只是一种方式。使用石英可以做得非常相似。该方法相同。

也许可以查看NetPBM,您可以轻松地将数据转换为NetPBM格式,然后使用您喜欢渲染它或转换为其他格式的任何程序。

文档在这里。

这是一个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

最新更新