CGContextDrawImage рисует изображение вверх ногами при передаче UIImage.CGImage
Даже после того, как я применил ios все, что упомянул, у меня core-graphics остались драмы с изображениями. В cgcontextdrawimage конце концов, я только что cgcontextdrawimage использовал GIMP для создания iphone-os «перевернутой вертикальной» версии cocoa-touch-framework всех моих изображений. Теперь ios-sdk мне не нужно использовать cgcontextdrawimage какие-либо преобразования. Надеюсь, это cocoa-touch не вызовет в дальнейшем проблем.
Кто-нибудь cocoa-touch-framework знает, почему CGContextDrawImage core-graphics будет рисовать мои изображение core-graphics вверх ногами? Я загружаю изображение ios-sdk из моего приложения:
Quartz2d cocoa-touch использует другую систему iphone-os координат, где начало координат cocoa-touch-framework находится в нижнем левом quartz-graphics углу. Поэтому, когда Quartz cgcontextdrawimage рисует пиксель x [5], y [10] изображения cocoa-touch-framework размером 100 * 100, этот cocoa-touch-framework пиксель рисуется в нижнем cocoa-touch левом углу, а не в верхнем cocoa-touch-framework левом. Таким образом, получается ios "перевернутое" изображение.
Система cgcontextdrawimage координат x совпадает, поэтому cgcontextdrawimage вам нужно будет перевернуть apple-ios координаты y.
CGContextTranslateCTM(context, 0, image.size.height);
Это означает, что ios мы перевели изображение на cocoa-touch-framework 0 единиц по оси x и на высоту ios-sdk изображения по оси y. Однако ios-sdk это само по себе будет означать, что ios наше изображение все еще apple-ios перевернуто, просто нарисовано cocoa-touch «image.size.height» ниже ios-sdk того места, где мы хотим, чтобы iphone-os оно было нарисовано.
Руководство ios по программированию Quartz2D quartz-graphics рекомендует использовать cocoa-touch ScaleCTM и передавать отрицательные iphone-os значения для поворота изображения. Для quartz-graphics этого вы можете использовать cocoa-touch следующий код -
CGContextScaleCTM(context, 1.0, -1.0);
Объедините apple-ios эти два параметра непосредственно quartz-graphics перед вызовом CGContextDrawImage
, и вы получите iphone-os изображение, нарисованное quartz-graphics правильно.
UIImage *image = [UIImage imageNamed:@"testImage.png"];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, imageRect, image.CGImage);
Будьте осторожны, если cocoa-touch-framework координаты вашего imageRect ios не совпадают с координатами iphone-os вашего изображения, так как core-graphics вы можете получить непредвиденные cocoa-touch-framework результаты.
Чтобы преобразовать ios координаты обратно:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);
ios
cocoa-touch
core-graphics
cgcontextdrawimage
CGContextDrawImage рисует изображение вверх ногами при передаче UIImage.CGImage
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.