从CGImage生产CCITT压缩的TIFF

编程入门 行业动态 更新时间:2024-10-27 09:43:57
本文介绍了从CGImage生产CCITT压缩的TIFF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个CGImage(核心图形,C/C ++).它是灰度的.好吧,最初是黑白,但是CGImage可能是RGB.没关系我想创建一个CCITT-Group 4 TIFF.

I have a CGImage (core graphics, C/C++). It's grayscale. Well, originally it was B/W, but the CGImage may be RGB. That shouldn't matter. I want to create a CCITT-Group 4 TIFF.

我可以通过使用正确的字典创建目标位置并将图像添加到其中来创建LZW TIFF(灰度或彩色).

I can create an LZW TIFF (grayscale or color) via creating a destination with the correct dictionary and adding the image in. No problem.

但是,似乎没有等效的kCGImagePropertyTIFFCompression值来表示CCITT-4.应该是4,但是会产生未压缩的.

However, there doesn't seem to be an equivalent kCGImagePropertyTIFFCompression value to represent CCITT-4. It should be 4, but that produces uncompressed.

我有一个手动CCITT压缩例程,因此如果可以获取二进制(每个像素1位)数据,就可以设置.但是我似乎无法从CGImage中获得1个BPP数据.我的代码应该将CGImage放到CGBitmapContext中,然后再给我数据,但似乎让我全黑了.

I have a manual CCITT compression routine, so if I can get the binary (1 bit per pixel) data, I'm set. But I can't seem to get 1 BPP data out of a CGImage. I have code that is supposed to put the CGImage into a CGBitmapContext and then give me the data, but it seems to be giving me all black.

我今天试图解决这个问题,但问了几个问题,让我问一个我真正想回答的问题,看看是否有人可以回答.

I've asked a couple of questions today trying to get at this, but I just figured, lets ask the question I REALLY want answered and see if someone can answer it.

有一种方法可以做到这一点.我一定想念一些愚蠢的东西.什么事?

There's GOT to be a way to do this. I've got to be missing something dumb. What is it?

推荐答案

这似乎可以正常工作并产生并非全黑的输出.可能有一种方法不需要先手动将其转换为灰度,但至少可以成功!

This seems to work and produce not-all-black output. There may be a way to do it that doesn't involve a manual conversion to grayscale first, but at least it works!

static void WriteCCITTTiffWithCGImage_URL_(CGImageRef im, CFURLRef url) { // produce grayscale image CGImageRef grayscaleImage; { CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericGray); CGContextRef bitmapCtx = CGBitmapContextCreate(NULL, CGImageGetWidth(im), CGImageGetHeight(im), 8, 0, colorSpace, kCGImageAlphaNone); CGContextDrawImage(bitmapCtx, CGRectMake(0,0,CGImageGetWidth(im), CGImageGetHeight(im)), im); grayscaleImage = CGBitmapContextCreateImage(bitmapCtx); CFRelease(bitmapCtx); CFRelease(colorSpace); } // generate options for ImageIO. Man this sucks in C. CFMutableDictionaryRef options = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); { { CFMutableDictionaryRef tiffOptions = CFDictionaryCreateMutable(kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); int fourInt = 4; CFNumberRef fourNumber = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &fourInt); CFDictionarySetValue(tiffOptions, kCGImagePropertyTIFFCompression, fourNumber); CFRelease(fourNumber); CFDictionarySetValue(options, kCGImagePropertyTIFFDictionary, tiffOptions); CFRelease(tiffOptions); } { int oneInt = 1; CFNumberRef oneNumber = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &oneInt); CFDictionarySetValue(options, kCGImagePropertyDepth, oneNumber); CFRelease(oneNumber); } } // write file CGImageDestinationRef idst = CGImageDestinationCreateWithURL(url, kUTTypeTIFF, 1, NULL); CGImageDestinationAddImage(idst, grayscaleImage, options); CGImageDestinationFinalize(idst); // clean up CFRelease(idst); CFRelease(options); CFRelease(grayscaleImage); } Nepheli:tmp ken$ tiffutil -info /tmp/output.tiff Directory at 0x1200 Image Width: 842 Image Length: 562 Bits/Sample: 1 Sample Format: unsigned integer Compression Scheme: CCITT Group 4 facsimile encoding Photometric Interpretation: "min-is-black" Orientation: row 0 top, col 0 lhs Samples/Pixel: 1 Number of Strips: 1 Planar Configuration: Not planar

更多推荐

从CGImage生产CCITT压缩的TIFF

本文发布于:2023-07-30 16:27:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1251041.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:CGImage   CCITT   TIFF

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!