2

次のコードでモノクロ画像を作成しています。

  CGColorSpaceRef cgColorSpace = CGColorSpaceCreateDeviceGray();
  CGImageRef cgImage = CGImageCreate (width, height, 1, 1, rowBytes, colorSpace, 0, dataProvider, decodeValues, NO, kCGRenderingIntentDefault);

ここで、はに等しいdecodeValues2の配列です。これにより、すばらしい画像が得られますが、私のデータ(PDFイメージマスクから取得)は、白地に黒ではなく黒地に白であるようです。画像を反転させるために、の値をに設定しようとしましたが、何も変更されませんでした。実際、私が無意味な値を入れても、同じイメージが得られます。CGFloat{0,1}decodeValues{1,0}decodeValues

なぜdecodeValuesここで無視されるのですか?白黒を反転するにはどうすればよいですか?

4

1 に答える 1

2

モノラル画像を作成および描画するためのコードを次に示します。それはあなたのものと同じですが、より多くのコンテキストがあります(そして必要なクリーンアップはありません):

size_t width = 200;
size_t height = 200;
size_t bitsPerComponent = 1;
size_t componentsPerPixel = 1;
size_t bitsPerPixel = bitsPerComponent * componentsPerPixel;
size_t bytesPerRow = (width * bitsPerPixel + 7)/8;
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray();
CGBitmapInfo bitmapInfo = kCGImageAlphaNone;
CGFloat decode[] = {0.0, 1.0};
size_t dataLength = bytesPerRow * height;
UInt32 *bitmap = malloc( dataLength );
memset( bitmap, 255, dataLength );

CGDataProviderRef dataProvider = CGDataProviderCreateWithData( NULL, bitmap, dataLength, NULL);

CGImageRef cgImage = CGImageCreate (
                          width,
                          height,
                          bitsPerComponent,
                          bitsPerPixel,
                          bytesPerRow,
                          colorspace,
                          bitmapInfo,
                          dataProvider,
                          decode,
                          false,
                          kCGRenderingIntentDefault
                          );  

CGRect destRect = CGRectMake(0, 0, width, height);
CGContextDrawImage( context, destRect, cgImage );

デコード配列をに変更すると、CGFloat decode[] = {0.0, 0.0};常に黒い画像が表示されます。それを試しても効果がなかった場合(使用する値に関係なく同じ画像が得られると言う)、実際にはそれらの値を渡していないが、自分はそうだと思っている、または:どういうわけかそうではないt実際にCGImageCreateの出力を調べます。

于 2011-09-02T14:27:30.817 に答える