【发布时间】:2013-03-24 01:12:24
【问题描述】:
我有一个应用程序,用户可以在其中拖放图像,并使用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(字节)
GL_PACK_ALIGNMENT并尝试抓取 RGB(3 字节)图像? -
我没有编辑 GL_PACK_ALIGNMENT,我正在抓取 RGB 图像
-
我在 glReadPixels 之前添加了
glPixelStorei(GL_PACK_ALIGNMENT, 3);,它没有影响任何东西 -
@JuliusPetraška:包对齐的有效值为 1、2、4 和 8。包对齐不是单个像素的大小,而是行开始的地址对齐。我很确定你想将 GL_PACK_ALIGNMENT 设置为 1
标签: objective-c macos opengl