NSBitmapImageRepをBMPファイル(Snow Leopard)に保存します。macosで開くと問題ないようです。しかし、それは私のマルチメディアデバイス(インターネットからの任意のBMPファイルを表示することができます)でエラーを起こします。何が悪いのか理解できませんが、ファイルの内部を見ると(macosのクールなhexfiendアプリで)、2つの間違いがあります:
- ヘッダーのbiHeightパラメーターの値が間違っています:4294966216(hex = C8FBFFFF)ヘッダーのbiWidthパラメーターが正しい:1920
- ビットマップコンテンツの最初のピクセル(BMP形式の54バイトヘッダーの後)は、元の画像の左上隅に対応します。元のBMPファイルでは、BMP形式で指定されているように、最初に左下隅のピクセルである必要があります。
アプリの完全なワークフローを説明するために、BMP画像をドラッグできるNSImageViewがあります。このビューはNSImageにバインドされています。ドラッグアンドドロップした後、この画像を(テキストを描画して)BMPファイルに保存するアクションがあります。
新しいBMPファイルを保存するためのコードは次のとおりです。
CGColorSpaceRefcolorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGContextRefcontext = CGBitmapContextCreate(NULL, (int)1920, (int)1080, 8, 4*(int)1920, colorSpace, kCGImageAlphaNoneSkipLast);
[duneScreenViewdrawBackgroundWithDuneFolder:self inContext:context inRect:NSMakeRect(0,0,1920,1080) needScale:NO];
if(folderType==DXFolderTypeMovie) {
[duneScreenViewdrawSynopsisContentWithDuneFolder:self inContext:context inRect:NSMakeRect(0,0,1920,1080) withScale:1.0];
}
CGImageRef backgroundImageRef = CGBitmapContextCreateImage(context);
NSBitmapImageRep*bitmapBackgroundImageRef = [[NSBitmapImageRepalloc] initWithCGImage:backgroundImageRef];
NSData*data = [destinationBitmap representationUsingType:NSBMPFileType properties:nil];
[data writeToFile:[NSStringstringWithFormat:@"%@/%@", folderPath,backgroundPath] atomically: YES];
duneScreenViewdrawSynopsisContentWithDuneFolderメソッドは、CGContextDrawImageを使用して画像を描画します。duneScreenViewdrawSynopsisメソッドは、CoreTextを使用して同じコンテキストでテキストを描画します。
何が悪いのか知っていますか?