标签: cgimage

从CGImage获取RGB像素数据

我试图从CGImage访问像素数据.我希望能够以整数形式访问RGB值.我想我差不多有这个代码:

UIImage* theImage = [UIImage imageNamed:@"rgb.png"];
CGImageRef cgImageRef = CGImageRetain(theImage.CGImage);
CFDataRef* imageData = CGDataProviderCopyData(CGImageGetDataProvider(cgImageRef));
NSLog(@"the data = %@", imageData);
Run Code Online (Sandbox Code Playgroud)

然后记录:

data = <010002fe fffdff02 0200fe04 0003fc>

图像是5x1 png,按顺序包含黑色,白色,红色,绿色和蓝色像素.

我真的不明白我在这看什么.我如何获得RGB值的数组,或类似的东西,以便我可以使用它们.

谢谢,Rich

iphone cgimage ios

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

使用CGImage的JPEG压缩质量

我使用CGImage的API( CGImageDestination, CGBitmapContext,,CGImage在Mac OS X等)以及iOS的压缩图像为JPEG.使用该kCGImageDestinationLossyCompressionQuality属性,您可以控制压缩质量:0.0最大压缩和1.0最高质量(如果可能,根据Apple,无损).

我发现当你去的时候,磁盘大小和图像质量都有很大的0.99提升1.0..例如,我有一个2048x1368的图像,当质量设置为压缩到430 KB 0.99但是当质量达到2.3 MB时设置为1.0.视觉质量也有很大的提升,并且0.99这个特定图像的设置是不可接受的.尝试设置质量之间的任何东西0.991.0作为规模保持在430 KB,直到不起作用0.995的地方跳起来2.3 MB.另外,是不是真的有素质相差无几0.90,以0.99在视觉质量有较大提升其范围的文件大小从353〜KB至430 KB,但不是.

有谁知道是否有任何方法可以提高JPEG质量?我真的需要的东西比0.99给予我的东西更好但却少于1.0提供给我的东西.也许我可以使用其他一些API?

我可能会尝试直接使用libjpeg,但我希望它不会出现这种情况.

更新

经过一些调查后发现,对于所有kCGImageDestinationLossyCompressionQuality设置,1.0Apple使用4:2:0 色度子采样(或色度抽取).这意味着对于YCrCb图像,它们仅针对每4个亮度(Y)像素采样一个色度像素(CrCb).换句话说,他们只使用原始图像中1/4的色度数据.对于1.0Apple 的质量使用4:4:4色度子采样,这对于每个亮度像素都不是色度子采样或一个色度像素.这就是文件大小爆炸的原因,因为图像包含4x颜色数据与质量<= 0.99.

那么,有没有人知道是否有办法使用CGImage(或任何其他API)关闭色度子采样的质量低于1.0

macos jpeg image cgimage ios

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

将NSImage*转换为CGImageRef?

有一种简单的方法可以在10.5中运行吗?

在10.6中,我可以使用nsImage CGImageForProposedRect:NULL上下文:NULL提示:NULL

如果我不使用1b黑白图像(如Group 4 TIFF),我可以使用位图,但cgbitmaps似乎不喜欢这种设置...有没有一般的方法这样做?

我需要这样做,因为我有一个看似只想添加CGImages的IKImageView,但我所拥有的只是NSImages.目前,我正在使用一个私有的setImage:(NSImage*)方法,我真的不会使用...

cocoa core-graphics objective-c nsimage cgimage

15
推荐指数
4
解决办法
3万
查看次数

如何裁剪UIImage而不失去它的规模属性?

目标:裁剪a UIImage(scale以2.0 的属性开头)

我执行以下代码:

let croppedCGImage = originalUIImage.cgImage!.cropping(to: cropRect)
let croppedUIImage = UIImage(cgImage: croppedCGImage!)
Run Code Online (Sandbox Code Playgroud)

此代码有效,但结果croppedUIImagescale属性不正确为1.0.


我已经尝试过指定scale创建最终图像的时间:

let croppedUIImage = UIImage(cgImage: croppedCGImage!, scale: 2.0, orientation: .up)
Run Code Online (Sandbox Code Playgroud)

这会产生正确的比例,但它会将size尺寸缩小一半.


我该怎么办?

(*注意:scaleUIImage上的属性很重要,因为我稍后会保存UIImagePNGRepresentation(_ image: UIImage)scale属性影响的图像)



编辑:

我得到以下工作.不幸的是,它比CGImage裁剪功能慢得多.

extension UIImage {
    func cropping(to rect: CGRect) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(rect.size, false, self.scale)

        self.draw(in: CGRect(x: -rect.origin.x, y: -rect.origin.y, width: self.size.width, height: self.size.height))

        let croppedImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

        return croppedImage …
Run Code Online (Sandbox Code Playgroud)

core-graphics uiimage cgimage ios swift

15
推荐指数
3
解决办法
3105
查看次数

核心图形CGImage掩码不会影响

我实际上要做的是在视图中有一个文本标签"切割"一个文本形状的孔.我试过使用self.mask = uiLabel但是那些拒绝正确定位文本所以我通过Core Graphics接近这个.

这是不起作用的代码(在draw(_ rect: CGRect))中:

    let context = (UIGraphicsGetCurrentContext())!

    // Set mask background color
    context.setFillColor(UIColor.black.cgColor)
    context.fill(rect)

    context.saveGState()


    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.alignment = .center

    let attributes = [
        NSParagraphStyleAttributeName: paragraphStyle,
        NSFontAttributeName: UIFont.systemFont(ofSize: 16, weight: UIFontWeightMedium),
        NSForegroundColorAttributeName: UIColor.white
    ]

    let string = NSString(string: "LOGIN")

    // This wouldn't vertically align so we calculate the string size and create a new rect in which it is vertically aligned
    let size = string.size(attributes: attributes)
    let position = CGRect( …
Run Code Online (Sandbox Code Playgroud)

core-graphics cgimage cgimagemaskcreate ios swift

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

来自字节数组的CGImage

使用标准图像格式(jpeg,gif,png等)从文件加载CGImage或NSImage非常简单.

但是,我现在需要在使用libfreetype生成的内存中以字节为单位创建CGImage.从格式化的字节数组中创建OpenGL纹理非常容易,我可以看到如何创建要写入的CGBitmapContext .但我似乎无法找到一种从原始像素阵列创建CGImage的简单方法.

cocoa freetype cgimage

14
推荐指数
3
解决办法
8560
查看次数

旋转CGImage

我有一个UIImage,我从UIImagePickerController获取.当我从- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info方法中收到图像时,我将其直接放入UIImageView进行预览,并为用户提供保存或丢弃图像的选项.

预览屏幕

当用户选择保存选项时,应用程序获取图像的png数据并将其保存到文档目录中.但是在2种可能的设备方向之一(仅景观)下发生的事情是图像被颠倒保存(更具体地说,从它应该的位置旋转180度).因此,当我在图库中加载图像时,它会显示为颠倒.

(参见图库中的左下角图片)

请参见左下图

我已经解决了UIImage来自UIImage的UIImage中的原始图像数据没有旋转,而是将方向存储为对象的属性,仅在显示时应用.所以我试图使用我在网上找到的一些代码来旋转与UIImage相关联的CGImage.但它似乎对图像完全没有影响.我正在使用的代码如下:

- (void)rotateImage:(UIImage*)image byRadians:(CGFloat)rads
{   
    // calculate the size of the rotated view's containing box for our drawing space 
    UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,image.size.width, image.size.height)];
    CGAffineTransform t = CGAffineTransformMakeRotation(rads);
    rotatedViewBox.transform = t;
    CGSize rotatedSize = rotatedViewBox.frame.size;

    // Create the bitmap context
    UIGraphicsBeginImageContext(rotatedSize);
    CGContextRef bitmap = UIGraphicsGetCurrentContext();

    // Move the origin to the middle of the image you want to rotate and scale around the center. 
    CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); 

    // Rotate …
Run Code Online (Sandbox Code Playgroud)

objective-c uiimage cgimage ios

14
推荐指数
3
解决办法
2万
查看次数

来自UIImagePickerViewController图像的方形缩略图

在我的应用程序中,用户使用UIImagePickerViewController选择图像或拍照.选择图像后,我想在方形UIImageView(90x90)上显示其缩略图.

我正在使用Apple的代码来创建缩略图.问题是缩略图不是平方的,函数在设置kCGImageSourceThumbnailMaxPixelSize键后为90,似乎只调整图像的高度,据我所知,kCGImageSourceThumbnailMaxPixelSize键应该负责设置缩略图的高度和宽度.

以下是我的代码的一瞥:

- (void)imagePickerController:(UIImagePickerController *)picker
    didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    NSData *imageData = UIImageJPEGRepresentation (image, 0.5);

    // My image view is 90x90
    UIImage *thumbImage = MyCreateThumbnailImageFromData(imageData, 90);

    [myImageView setImage:thumbImage];

    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {

        UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }

    [picker dismissViewControllerAnimated:YES completion:nil];
}

UIImage* MyCreateThumbnailImageFromData (NSData * data, int imageSize) {

    CGImageRef        myThumbnailImage = NULL;
    CGImageSourceRef  myImageSource;
    CFDictionaryRef   myOptions = NULL;
    CFStringRef       myKeys[3];
    CFTypeRef         myValues[3];
    CFNumberRef       thumbnailSize;

    // Create an image source from NSData; …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c thumbnails cgimage ios

14
推荐指数
3
解决办法
1万
查看次数

在将图像转换为CGImage时丢失图像方向

当从矩形原始图像中裁剪图像的正方形部分时,我正面临图像方向问题.当图像处于风景中时,它很好.但是当它是纵向时,似乎没有保留图像方向,这导致图像具有错误的方向和糟糕的裁剪:

 func cropImage(cropRectangleCoordinates: CGRect) {

        let croppedImage = originalImage

        let finalCroppedImage : CGImageRef = CGImageCreateWithImageInRect(croppedImage.CGImage, cropRectangleCoordinates)

        finalImage =  UIImage(CGImage: finalCroppedImage)!


    }
Run Code Online (Sandbox Code Playgroud)

我认为问题在于croppedImage.CGImage.这里图像被转换为CGImage,但似乎不保留方向.通过UIImage仅使用来保持方向很容易,但是为了使裁剪,图像需要暂时进行CGImage,这就是问题所在.即使我在转换回图像时重新定向图像UIImage,它也可能处于正确的方向,但在裁剪时已经完成了损坏CGImage.

这是一个很快的问题,所以请快速回答,因为Objective-C中的解决方案可能有所不同.

uiimage cgimage ios swift

14
推荐指数
6
解决办法
1万
查看次数

从CGImageRef创建的UIImage因UIImagePNGRepresentation而失败

我正在使用以下代码来裁剪并创建一个更大的UIImage.我已经将问题与CGImageCreateWithImageInRect()函数隔离开来,它似乎没有按照我想要的方式设置一些CGImage属性.:-)问题是调用函数UIImagePNGRepresentation()失败返回nil.

CGImageRef origRef = [stillView.image CGImage];
CGImageRef cgCrop = CGImageCreateWithImageInRect( origRef, theRect);
UIImage *imgCrop = [UIImage imageWithCGImage:cgCrop];
Run Code Online (Sandbox Code Playgroud)

...

NSData *data = UIImagePNGRepresentation ( imgCrop);
Run Code Online (Sandbox Code Playgroud)

- libpng错误:没有IDAT写入文件

知道UIImage中裁剪矩形可能有什么不妥或替代吗?非常感谢!

iphone uiimage cgimage nsdata

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