首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glReadPixels -> NSData ->保存图像

glReadPixels -> NSData ->保存图像
EN

Stack Overflow用户
提问于 2012-08-14 16:22:29
回答 2查看 692关注 0票数 1

我创建了一个用glReadPixels信息填充的NSBitmapImageRep。它看起来是这样的:

代码语言:javascript
复制
    NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:width pixelsHigh:height bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bytesPerRow:3 * width bitsPerPixel:0];
    glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, [imageRep bitmapData]);

然后将其转换为NSData并写入文件。但我的图像被颠倒了。我怎么才能修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-23 23:30:45

绘制成翻转的NSImage。这会将颠倒的图像绘制到正确的方向。然后,您将获得NSImage的tiff表示,您可以使用另一个带有imageRepWithData:NSBitmapImageRep将其更改为其他图像类型。使用新的图像表示法通过representationUsingType:properties:创建一个新的NSData对象,并将新的NSData对象保存到文件中。

代码语言:javascript
复制
    NSRect rect = self.bounds;
    NSSize size = rect.size;
    GLsizei width = (GLsizei)size.width;
    GLsizei height = (GLsizei)size.height;
    NSBitmapImageRep* imgRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:width pixelsHigh:height bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bytesPerRow:width*3 bitsPerPixel:0];
    glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, [imgRep bitmapData]);
#ifdef __MAC_10_8
    NSImage* image = [NSImage imageWithSize:size flipped:YES drawingHandler:^(NSRect dstRect){
        return [imgRep drawInRect:dstRect];
    }];
#else
    NSImage* image = [[NSImage alloc] initWithSize:size];
    [image lockFocusFlipped:YES];
    [imgRep drawInRect:rect];
    [image unlockFocus];
#endif
    NSData* tiff = [image TIFFRepresentation];
票数 1
EN

Stack Overflow用户

发布于 2013-03-24 01:15:25

bytesPerRow应为(width*3+3)&~3

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11948417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档