有谁知道为什么CGContextDrawImage
会把我的形象颠倒过来?我从我的应用程序加载图像:
UIImage *image = [UIImage imageNamed:@"testImage.png"];
Run Code Online (Sandbox Code Playgroud)
然后简单地要求核心图形将其绘制到我的上下文中:
CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage);
Run Code Online (Sandbox Code Playgroud)
它呈现在正确的位置和尺寸,但图像是颠倒的.我一定错过了一些非常明显的东西吗?
CGContextDrawImage(CGContextRef,CGRect,CGImageRef)在绘制由CoreGraphics(即使用CGBitmapContextCreateImage)创建的CGImage时,执行MUCH WORSE比绘制支持UIImage的CGImage时要好.看到这个测试方法:
-(void)showStrangePerformanceOfCGContextDrawImage
{
///Setup : Load an image and start a context:
UIImage *theImage = [UIImage imageNamed:@"reallyBigImage.png"];
UIGraphicsBeginImageContext(theImage.size);
CGContextRef ctxt = UIGraphicsGetCurrentContext();
CGRect imgRec = CGRectMake(0, 0, theImage.size.width, theImage.size.height);
///Why is this SO MUCH faster...
NSDate * startingTimeForUIImageDrawing = [NSDate date];
CGContextDrawImage(ctxt, imgRec, theImage.CGImage); //Draw existing image into context Using the UIImage backing
NSLog(@"Time was %f", [[NSDate date] timeIntervalSinceDate:startingTimeForUIImageDrawing]);
/// Create a new image from the context to use this time in CGContextDrawImage:
CGImageRef theImageConverted = CGBitmapContextCreateImage(ctxt);
///This is …
Run Code Online (Sandbox Code Playgroud) 我有一个图像,前景中有一个黄色花瓶,透明背景:
我在CGContext上绘制它:
CGContextDrawImage(context, CGRectMake(0, 0, 100, 100), myImage.CGImage);
Run Code Online (Sandbox Code Playgroud)
我可以使用以下语句在它周围画一个阴影CGContextDrawImage
:
CGContextSetShadowWithColor(context, CGSizeMake(0,0), 5, [UIColor blueColor].CGColor);
Run Code Online (Sandbox Code Playgroud)
但我想在图像周围放一个笔画,这样看起来就像是:
如果我这样做:
CGContextSetRGBStrokeColor(shadowContext, 0.0f, 0.0f, 1.0f, 1.0f);
CGContextSetLineWidth(shadowContext, 5);
CGContextStrokeRect(shadowContext, CGRectMake(0, 0, 100, 100));
Run Code Online (Sandbox Code Playgroud)
它(显然)围绕整个iamge绘制一个矩形边框,如下所示:
这不是我需要的.
但是在第三张图片中绘制边框的最佳方法是什么?
请注意,在这种情况下无法使用UIImageView,因此使用UIImageView的CALayer属性不适用.
如何旋转CGContextDrawImage()
中心绘制的图像?
在 drawRect:
CGContextSaveGState(c);
rect = CGRectOffset(rect, -rect.size.width / 2, -rect.size.height / 2);
CGContextRotateCTM(c, angle);
CGContextDrawImage(c, rect, doodad.CGImage);
CGContextRotateCTM(c, -angle);
CGContextTranslateCTM(c, pt.x, pt.y);
prevRect = rect;
CGContextRestoreGState(c);
Run Code Online (Sandbox Code Playgroud)
我在原点绘制图像,然后在中心旋转图像,然后转换到应该绘制的位置.不工作.
core-graphics cgcontext cgaffinetransform ios cgcontextdrawimage
我面临着一个奇怪的问题MKMapView
.我用了一个MKOverlayRenderer
.现在的问题是当我缩小图像显示正确时.但是在放大的情况下,图像的某些部分会被切断.它看起来像MapView
覆盖层上方的一部分.以下是我的叠加渲染器代码.
class MapOverlayRenderer: MKOverlayRenderer {
var overlayImage: UIImage
var plan: Plan
init(overlay: MKOverlay, overlayImage: UIImage, plan: Plan) {
self.overlayImage = overlayImage
self.plan = plan
super.init(overlay: overlay)
}
override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in ctx: CGContext) {
let theMapRect = overlay.boundingMapRect
let theRect = rect(for: theMapRect)
// Rotate around top left corner
ctx.rotate(by: CGFloat(degreesToRadians(plan.bearing)));
// Draw the image
UIGraphicsPushContext(ctx)
overlayImage.draw(in: theRect, blendMode: CGBlendMode.normal, alpha: 1.0)
UIGraphicsPopContext();
}
func degreesToRadians(_ x:Double) -> Double { …
Run Code Online (Sandbox Code Playgroud) 我正在努力当用户需要从相机中的照片添加宽彩色照片在iOS的10支持,我需要使用支持新的色彩空间来保存照片数据的新API - UIGraphicsImageRenderer
的jpegData
替代UIImageJPEGRepresentation
.
我遇到了一些图像方向的麻烦.在我的iPad上纵向拍照,图像绘制不正确.请参阅以下评论:
旧API:
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let imageData = UIImageJPEGRepresentation(image, 1)
Run Code Online (Sandbox Code Playgroud)
新API:
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let cgImage = image.cgImage!
let ciImage = CIImage(cgImage: cgImage)
let format = UIGraphicsImageRendererFormat()
format.scale = 1
format.prefersExtendedRange = true
let renderer = UIGraphicsImageRenderer(bounds: ciImage.extent, format: format)
let imageData = renderer.jpegData(withCompressionQuality: 1, actions: { context in
context.cgContext.draw(cgImage, in: ciImage.extent) //draws flipped horizontally
//image.draw(at: .zero) //draws rotated 90 degrees leaving black at bottom
//image.draw(in: …
Run Code Online (Sandbox Code Playgroud) 我无法转换CGContextDrawImage为swift 3,我尝试了context.draw,但它不起作用.那里有人可以给我一个反馈
码:
import UIKit
public struct Pixel {
public var value: UInt32
public var red: UInt8 {
get {
return UInt8(value & 0xFF)
}
set {
value = UInt32(newValue) | (value & 0xFFFFFF00)
}
}
public var green: UInt8 {
get {
return UInt8((value >> 8) & 0xFF)
}
set {
value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF)
}
}
public var blue: UInt8 {
get {
return UInt8((value >> 16) & 0xFF)
}
set { …
Run Code Online (Sandbox Code Playgroud) 我是swift的新手,我想在我称为mapView的图像上画两条点之间的线,我试图使用CGContext但没有结果,任何想法都有帮助吗?谢谢.
UIGraphicsBeginImageContext(mapView.bounds.size)
let context : CGContext = UIGraphicsGetCurrentContext()!
context.addLines(between: [CGPoint(x:oldX,y:oldY), CGPoint(x:newX, y:newY)])
context.setStrokeColorSpace(CGColorSpaceCreateDeviceRGB())
context.setStrokeColor(UIColor.blue.cgColor.components!)
context.setLineWidth(3)
mapView?.image?.draw(at: CGPoint(x:0, y:0))
context.strokePath()
mapView.image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud) 帮助,我是ios编程的新手,我想旋转可能UIImage但我不希望边缘被切割或松散图像的某些部分.
这是我的代码:
double angle = M_PI * 10/ 180; CGSize s = {image.size.width, image.size.height}; UIGraphicsBeginImageContext(s); CGContextRef ctx = UIGraphicsGetCurrentContext();
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, image.size.width/2, image.size.height/2);
transform = CGAffineTransformRotate(transform, angle);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(ctx, transform);
CGContextDrawImage(ctx,CGRectMake(-[image size].width/2,-[image size].height/2,image.size.width, image.size.height),image.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
Run Code Online (Sandbox Code Playgroud)
图像正在旋转,但框架的大小不会因为某些图像被切割而改变.
输出:https://fbcdn-sphotos-ea.akamaihd.net/hphotos-ak-xpf1/t1.0-9/1555286_761679470521535_1800180000235265553_n.jpg
预期产出:https://fbcdn-photos-ga.akamaihd.net/hphotos-ak-xfa1/t1.0-0/10314770_761675840521898_6536715783383115855_a.jpg
请帮我谢谢.
我有一个UIImage
使用的扩展CGContextDrawImage
.它只是旋转一个UIImage
.我更新到Xcode8和Swift3,无法弄清楚如何使用CGContextDrawImage
.
我在CGContextDrawImage上遇到错误.
"无法将类型"CGImage.Type的值转换为预期的参数类型'CGImage?'"
我的代码是:
CGContextDrawImage(bitmap, CGRectMake(-size.width / 2, -size.height / 2, size.width, size.height), CGImage)
Run Code Online (Sandbox Code Playgroud)
整个扩展:
extension UIImage {
public func imageRotatedByDegrees(degrees: CGFloat, flip: Bool) -> UIImage {
let radiansToDegrees: (CGFloat) -> CGFloat = {
return $0 * (180.0 / CGFloat(M_PI))
}
let degreesToRadians: (CGFloat) -> CGFloat = {
return $0 / 180.0 * CGFloat(M_PI)
}
// calculate the size of the rotated view's containing box for our drawing space
let rectZero = …
Run Code Online (Sandbox Code Playgroud) ios ×8
cgcontext ×5
swift3 ×3
swift ×2
cocoa-touch ×1
mkmapview ×1
mkoverlay ×1
objective-c ×1
performance ×1
uiimage ×1
uikit ×1