我有一个应用程序,用户可以拖放图像,并且正在用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是不编辑的。
发布于 2012-10-09 15:35:55
在播放像素数据之前,您必须告诉OpenGL如何“格式化”它。这意味着设置GL_PACK_的所有→glPixelStore参数。对您来说最重要的是对齐参数。还请记住,要用每个像素正确的组件数编写文件,还要从OpenGL中读取正确的组件。
发布于 2013-03-23 17:12:24
我也有过同样的
你只需要设置正确的bytesPerRow
bytesPerRow:(width*3+3)&~3https://stackoverflow.com/questions/12803479
复制相似问题