0

我有应用程序,用户可以在其中拖放图像,并且正在重新绘制它以OpenGL进行一些可行的处理。一切正常。当用户想要保存他的图像时,它的工作方式如下:

glReadPixels -> NSBitmapImageRep -> NSData -> Write to file

这也有效。几乎。对于某些图像,它无法正常工作。

例如:

.png

当我打开并保存此图像时: 在此处输入图像描述

我得到:
在此处输入图像描述

如果我打开并保存此图像: 在此处输入图像描述

我得到:
在此处输入图像描述

.jpg

如果我打开并保存:
在此处输入图像描述

我得到:
在此处输入图像描述

当我打开并保存时:
在此处输入图像描述

我得到:
在此处输入图像描述

所以有时图像保存得不好。为什么会这样?


这是我NSBitmapImageRep的分配方式:

NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:_image_width pixelsHigh:_image_height bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bytesPerRow:3 * _image_width bitsPerPixel:0];

并且GL_PACK_ALIGNMENT没有被编辑。

4

2 回答 2

2

在填充像素数据之前,您必须告诉 OpenGL 如何“格式化”它。这意味着设置→glPixelStore的所有 GL_PACK_ 参数。对您来说最重要的是对齐参数。还要记住,用每个像素正确数量的组件编写文件,并从 OpenGL 读取正确的组件。

于 2012-10-09T15:35:55.610 回答
0

我有同样的

您只需要设置正确的 bytesPerRow

bytesPerRow:(width*3+3)&~3
于 2013-03-23T17:12:24.167 回答