У меня есть NSBitmapImageRep, что я создаю следующим образом:NSBitmapImageRep генерироваться BMP не может быть прочитан на Windows,
+ (NSBitmapImageRep *)bitmapRepOfImage:(NSURL *)imageURL {
CIImage *anImage = [CIImage imageWithContentsOfURL:imageURL];
CGRect outputExtent = [anImage extent];
NSBitmapImageRep *theBitMapToBeSaved = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:NULL pixelsWide:outputExtent.size.width
pixelsHigh:outputExtent.size.height bitsPerSample:8 samplesPerPixel:4
hasAlpha:YES isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace
bytesPerRow:0 bitsPerPixel:0];
NSGraphicsContext *nsContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:theBitMapToBeSaved];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext: nsContext];
CGPoint p = CGPointMake(0.0, 0.0);
[[nsContext CIContext] drawImage:anImage atPoint:p fromRect:outputExtent];
[NSGraphicsContext restoreGraphicsState];
return [[theBitMapToBeSaved retain] autorelease];
}
И быть сохранены как BMP этот путь:
NSBitmapImageRep *original = [imageTools bitmapRepOfImage:fileURL];
NSData *converted = [original representationUsingType:NSBMPFileType properties:nil];
[converted writeToFile:filePath atomically:YES];
Дело здесь заключается в том, что файл BMP можно правильно читать и обрабатывать в Mac OSX, но под Windows он просто не загружается, как на этом скриншоте:
screenshot http://dl.dropbox.com/u/1661304/Grab/74a6dadb770654213cdd9290f0131880.png
Если файл открыт с помощью MS Paint (да, MS Paint может открыть его), а затем сохранена, но она будет работать.
Поблагодарите за руку здесь. :)
Заранее спасибо.
Здравствуйте, прежде всего, за вашу помощь. Вы правы, что сохраняете] autorelease] не имеет никакого смысла. Ваш код кажется намного лучше моего предыдущего. Единственная проблема заключается в том, что BMP по-прежнему не может быть открыт встроенным средством просмотра файлов Windows, такой же точной ошибкой, как указано выше. (Вы также можете исправить свой второй метод, если кто-то захочет его использовать. Вы не можете вызывать себя, поскольку объект не выделен, а файлURL должен быть imageURL). – MegaEduX
Вы * можете * вызывать self, потому что это метод класса, вызывающий метод другого класса. –
Ну, я думаю, я всегда учусь. Знайте, что связано с проблемой BMP? – MegaEduX