我有app,其中用户拖放图像,并且正在使用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
未被编辑。
答案 0 :(得分:2)
在竞争像素数据之前,你必须告诉OpenGL如何“格式化”它。这意味着设置→glPixelStore的所有GL_PACK_参数。最重要的是对齐参数。另外请记住用每个像素编写正确数量的组件的文件,并从OpenGL中读取正确的组件。
答案 1 :(得分:0)
我有相同的
您只需设置正确的bytesPerRow
即可bytesPerRow:(width*3+3)&~3