2017-07-10 27 views
0

私は私の質問に答えるためにHow to load JPG file into NSBitmapImageRep?を使用してみましたが、私は得る:「『* nsimagerep』タイプの表現で 『nsbitmapimagerep *』を初期化し、互換性のないポインタ型」JPEGをビットマップイメージ配列に読み込む方法は?

を。

NSImage *controlImage = [[NSImage alloc] initWithContentsOfFile:filePath]; 
NSBitmapImageRep *imageRep = [[controlImage representations] objectAtIndex:0]; //"incompatible pointer types initializing 'nsbitmapimagerep *' with an expression of type 'nsimagerep *'" 

答えて

1

コンパイラが正しいです。 NSImageのrepresentionsは(ドキュメントを参照)NSImageRepNSArrayです:

@property(readonly, copy) NSArray <NSImageRep *> *representations 

コンパイラのメッセージは、第二のラインをキャストし、(NSImageを使用せずに)直接的な方法を使用することができ 警告のみですので、 NSBitmapImageRep取得するには:(ビット醜いキャストを)避け

NSBitmapImageRep *imageRep = 
    (NSBitmapImageRep *)[NSBitmapImageRep imageRepWithContentsOfFile:filePath]; 

もう一つの方法は次のとおりです。

NSData *imgData = [NSData dataWithContentsOfFile:filePath]; 
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imgData]; 

警告:このバージョンはfilePathの@ 2などを評価しません!

0

NSBitmapImageRepは、「半抽象」であるNSImageRepのサブクラスです。 NSImageは、NSEPSImageRepのように、EPS画像用に他の種類の表現も保存できます。

ビットマップであることがわかっている場合は、単純にキャストできます。

関連する問題