我有一个代表像素数据的文件 - 它是一种自定义格式,因此我需要读取代表每个构成图像的每个像素的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