标签: cgimage

缩放UIImage/CGImage

我正在使用相机应用程序实现缩放功能AVFoundation.我正在缩放我的预览视图,如下所示:

[videoPreviewView setTransform:CGAffineTransformMakeScale(cameraZoom, cameraZoom)];
Run Code Online (Sandbox Code Playgroud)

现在,在拍完照片之后,我想在将照片cameraZoom保存到相机胶卷之前使用该值进行缩放/裁剪.我该怎么做才能做到最好?

编辑:使用贾斯汀的答案:

CGRect imageRect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);

CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], imageRect);

CGContextRef bitmapContext = CGBitmapContextCreate(NULL, CGImageGetWidth(imageRef), CGImageGetHeight(imageRef), CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), CGImageGetColorSpace(imageRef), CGImageGetBitmapInfo(imageRef));

CGContextScaleCTM(bitmapContext, scale, scale);
CGContextDrawImage(bitmapContext, imageRect, imageRef);

CGImageRef zoomedCGImage = CGBitmapContextCreateImage(bitmapContext);

UIImage* zoomedImage = [[UIImage alloc] initWithCGImage:imageRef];
Run Code Online (Sandbox Code Playgroud)

它正在缩放图像,但它没有占据它的中心,而是似乎占据了右上角区域.(我不是积极的).

另一个问题(我应该在OP中更清楚)是图像保持相同的分辨率,但我宁愿将其裁剪掉.

core-graphics image-processing uiimage cgimage ios

2
推荐指数
1
解决办法
2613
查看次数

IOS:使用模式图像作为背景 - 内存泄漏

好.我会寻找答案,也可以自己找.我有回答自己问题的恶习.

无论如何,我有一个应用程序,旨在相当容易"皮肤化".作为其中的一部分,我在静态类中隔离了特定于变体的方法.这些静态方法提供特定于变体的主应用程序图像,颜色和设置..h文件对于主应用程序是通用的,但.m文件特定于变体.

我喜欢使用能够发送图像作为背景(自动平铺),因此接口文件指定例程返回UIColor,如下所示:

+ (UIColor *)meetingDetailBackgroundColor;
Run Code Online (Sandbox Code Playgroud)

但是实现文件加载了一个图像文件,并返回它,如下所示:

+ (UIColor *)meetingDetailBackgroundColor
{
    return [UIColor colorWithPatternImage:[UIImage imageNamed:@"DarkWeave.png"]];
}
Run Code Online (Sandbox Code Playgroud)

在上下文中使用哪个,如下所示:

[[self view] setBackgroundColor:[BMLTVariantDefs meetingDetailBackgroundColor]];
Run Code Online (Sandbox Code Playgroud)

注意:编辑恢复我使用的原始简单代码.

现在,问题是我有时(并不总是)得到泄漏.

我确定我在这里做些什么.我只是不确定是什么.

有任何想法吗?

BTW:这是一个在IOS 5上运行的ARC程序.我是ARC的新手,但我认为这是我应该这样做的方式.

iphone memory-leaks uiimage cgimage ios

2
推荐指数
1
解决办法
3707
查看次数

CGImageRef cg = [[UIImage imageNamed:Path] CGImage]; 需要CGImageRelease(cg)'?

我试图从iOS中的图像资源中读取ARGB像素.为此,我需要一个CGImageRef我可以使用它来获得它CGDataProvider.我的问题是,如果我创建一个CGImageRef使用:

CGImageRef cg = [[UIImage imageNamed: Path] CGImage];
Run Code Online (Sandbox Code Playgroud)

我最终还需要打电话CGImageRelease(cg)吗?如果我不打电话CGImageRelease,我会有内存泄漏吗?

我遇到的另一个问题是第二次读同一个文件会返回一个空图像,我怀疑这可能是因为我CGImageRelease第一次没有打电话.

objective-c core-foundation cgimage ios

2
推荐指数
1
解决办法
1091
查看次数

CGImage到UIImage不起作用

我开发和iOS应用程序为iPad和我为了获得来自Facebook,Twitter的,闪烁的图像,并在相机胶卷使用Grabkit.要从最后一个获取图像,我需要将CGImage转换为UIImage,但我遇到了麻烦.就像我没有得到任何图像,因为当我稍后使用UIImage时,应用程序崩溃了这个日志:

 *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 653]'
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码转换CGImage:

UIImage* image = [UIImage imageWithCGImage:imgRef];
Run Code Online (Sandbox Code Playgroud)

所以这段代码不会崩溃,但是当我使用创建的图像时,它确实会崩溃.怎么了?代码错了吗?

crash objective-c uiimage cgimage ios

2
推荐指数
1
解决办法
9508
查看次数

使用CGPoint从图像获取像素颜色

在Swift中获取某个像素(由CGPoint指定)的像素颜色时,我遇到了很多困难。到目前为止,这是我的代码:

@IBOutlet weak var graphImage: UIImageView!

var image : UIImage?

override func viewDidLoad() {
    super.viewDidLoad()
}

func getPixelColor(pos: CGPoint) -> UIColor {
    var pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.graphImage.image!.CGImage))
    var data : UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

    var pixelInfo : Int = ((Int(graphImage.image!.size.width) * Int(pos.y) + Int(pos.x)*4))

    let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
    let g = CGFloat(data[pixelInfo]+1) / CGFloat(255.0)
    let b = CGFloat(data[pixelInfo]+2) / CGFloat(255.0)
    let a = CGFloat(data[pixelInfo]+3) / CGFloat(255.0)

    return UIColor(red: r, green: g, blue: b, alpha: a)
}

@IBAction func playTapped(sender: AnyObject) …
Run Code Online (Sandbox Code Playgroud)

cgimage uicolor ios swift

2
推荐指数
2
解决办法
3555
查看次数

Swift playground - 无法将过滤后的UIImage转换为CGImage

在Swift游乐场中,我正在加载JPEG,将其转换为UIImage并将其过滤为单色.然后我将生成的过滤图像转换为UIImage.

输入和过滤的图像正确显示.

然后我将两个图像转换为CGImage类型.这适用于输入图像,但过滤后的图像从转换中返回nil:

// Get an input image
let imageFilename = "yosemite.jpg"
let inputImage = UIImage(named: imageFilename )
let inputCIImage = CIImage(image:inputImage!)

// Filter the input image - make it monochrome
let filter = CIFilter(name: "CIPhotoEffectMono")
filter!.setDefaults()
filter!.setValue(inputCIImage, forKey: kCIInputImageKey)
let CIout = filter!.outputImage
let filteredImage = UIImage(CIImage: CIout!)        

// Convert the input image to a CGImage
let inputCGImageRef = inputImage!.CGImage           // Result: <CGImage 0x7fdd095023d0>
// THE LINE ABOVE WORKS

// Try to convert the filtered image to a CGImage …
Run Code Online (Sandbox Code Playgroud)

uiimage cgimage ciimage swift

2
推荐指数
1
解决办法
1231
查看次数

为照片添加多个效果

如何为图片添加多种效果?我有以下代码为照片添加效果:

func applyEffects(name: String, n: Float) {
    filter.setValue(self.cImage, forKeyPath: kCIInputImageKey)
    filter.setValue(n, forKeyPath: name)

    let result = filter.value(forKey: kCIOutputImageKey) as! CIImage
    let cgImage = CIContext.init(options: nil).createCGImage(result, from: result.extent)

    self.customImage = UIImage.init(cgImage: cgImage!)
}

func brightness(n: Float) {
    self.applyEffects(name: kCIInputBrightnessKey, n: n)
}

func contrast(n: Float) {
    self.applyEffects(name: kCIInputContrastKey, n: n)
}

func saturation(n: Float) {
    self.applyEffects(name: kCIInputSaturationKey, n: n)
}
Run Code Online (Sandbox Code Playgroud)

但是当我想要应用第二个效果时,第一个效果消失了.如何将两个或多个效果叠加在一起?

uiimage cgimage ios swift

2
推荐指数
1
解决办法
179
查看次数

CGImage到MPSTexture或MPSImage

我有一个CGImage,它由CVPixelbuffer(ARGB)构成.我想将CGImage转换为MTLTexture.我用:

  let texture: MTLTexture = try m_textureLoader.newTexture(with: cgImage, options: [MTKTextureLoaderOptionSRGB : NSNumber(value: true)] )
Run Code Online (Sandbox Code Playgroud)

后来我想在具有3个通道的MPSImage中使用纹理:

let sid   = MPSImageDescriptor(channelFormat: MPSImageFeatureChannelFormat.float16, width: 40, height: 40, featureChannels: 3)
preImage    = MPSTemporaryImage(commandBuffer:  commandBuffer, imageDescriptor: sid)
lanczos.encode(commandBuffer: commandBuffer, sourceTexture: texture!, destinationTexture: preImage.texture)
scale.encode  (commandBuffer: commandBuffer, sourceImage: preImage, destinationImage: srcImage)
Run Code Online (Sandbox Code Playgroud)

现在我的问题:textureLoader.newTexture(...)如何将四个ARGB通道映射到MPSImageDescriptor中指定的3个通道?如何确保使用RGB组件而不是ARG?有没有办法指定频道映射?

谢谢,克里斯

cgimage swift metal metalkit

2
推荐指数
1
解决办法
420
查看次数

当我将MTLTexture保存到CGImage时,像素颜色会改变吗?

我需要保存金属纹理并将其加载到文件中。下面的示例代码如下。我注意到RGB值在保存并重新加载时正在发生变化。

metal texture pixel: RGBA: 42,79,12,95  
after save and reload:     66,88,37,95
Run Code Online (Sandbox Code Playgroud)

那变得越来越明亮。下次保存时,它开始变暗。我在使用iPad Pro,所以想知道这是否是色域问题。关于为什么会发生这种情况以及如何解决的任何指示?

在下面的行中cgImage,我可以检查原始像素数据,看看RGBA是66,88,37。

// saving...
let ciCtx = CIContext()
let ciImage = CIImage(mtlTexture: metalTexture, options: [:])
// [ … transfrom to flip y-coordinate …]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let cgImage = ciCtx.createCGImage(ciImage, from: fullRect, format: kCIFormatRGBA8, colorSpace: colorSpace)!
let imageDest = CGImageDestinationCreateWithData(mData, kUTTypePNG, 1, nil)!
CGImageDestinationAddImage(imageDest, cgImage, nil)
CGImageDestinationFinalize(imageDest)

// loading...
let src = CGImageSourceCreateWithData(imgData, nil)
let img = CGImageSourceCreateImageAtIndex(src, 0, nil)
let loader = MTKTextureLoader(device: self.metalDevice) …
Run Code Online (Sandbox Code Playgroud)

cgimage color-space ios metal ios11

2
推荐指数
1
解决办法
913
查看次数

如何在CALayer上居中CGImage?

我试图设置UIImageCGImage作为layer的内容,然后添加layerviewlayer
黄色视图的中心应该是五颗星。那就是我想要的。
不过好像星星的中心与对齐originview。我该怎么做才能纠正它?

func putOnStars() {
    let rect = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
    rect.backgroundColor = .yellow
    view.addSubview(rect)

    let baseLayer = CALayer()
    baseLayer.contents = UIImage(named: "stars")?.cgImage
    baseLayer.contentsGravity = kCAGravityCenter
    rect.layer.addSublayer(baseLayer)

}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 如果您要测试,这是为您提供的星图。 在此处输入图片说明

calayer cgimage swift

1
推荐指数
1
解决办法
1402
查看次数