标签: uiimage

iPhone CGContextRef CGBitmapContextCreate不支持的参数组合

在我的应用程序中,我需要调整大小并裁剪一些本地和在线存储的图像.我正在使用Trevor Harmon的教程实现UIImage+Resize.

在我的iPhone 4(iOS 4.3.1)上一切正常,我没有问题.但是在我的iPhone 3G(iOS 3.2)上,调整大小和裁剪方法对任何图片都不起作用(本地存储的是PNG).这是控制台输出:

Tue Apr  5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate:     unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr  5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr  5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr  5 …
Run Code Online (Sandbox Code Playgroud)

iphone uiimage cgcontext cgimage cgbitmapcontextcreate

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

我如何对UIImage进行去饱和处理?

在iOS 5.x中是否有一种简单的方法(或内置库)去饱和UIImage?这是我目前的做法:

CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGContextTranslateCTM(context, 0.0, self.bounds.size.height); // flip image right side up
    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextDrawImage(context, rect, self.image.CGImage);
    CGContextSetBlendMode(context, kCGBlendModeSaturation);
    CGContextClipToMask(context, self.bounds, image.CGImage); // restricts drawing to within alpha channel
    CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, desaturation);
    CGContextFillRect(context, rect);

    CGContextRestoreGState(context); // restore state to reset blend mode
Run Code Online (Sandbox Code Playgroud)

这似乎比我预期的要复杂一些.有比这更简单的方法吗?

我在想Core Image,但我似乎无法找到一个关于如何使用它去饱和图像的具体例子.

iphone core-graphics objective-c uiimage ios

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

如何将(OS_dispatch_data*)5018112字节转换为NSData以放入UIImage

我一直在寻找一个答案,有些人似乎可能是我需要的,但我不确定.我发现了这个问题#9152851和这个问题#2617625并在一堆链接上探讨了但我需要一些方向.

本质上,我正在调度异步调用以使用OpenCV处理图像.您可以通过此处的代码看到我将其转换为NSData*,然后再将其发送回我的代理人.

NSData *proccessedData = [NSData dataWithBytes:processedImage.data length:(processedImage.rows * processedImage.cols)];        
[self.delegate onProcessedBitmapReady:proccessedData withFocusQuality:focusQuality];
Run Code Online (Sandbox Code Playgroud)

但是当我回到我的委托时,我的processedBitmap是类型(OS_dispatch_data*)并包含一个字节值.所以,当我尝试设置UIImage时,它被设置为null.

- (void)onProcessedBitmapReady:(NSData *)processedBitmap withFocusQuality:(double)focusQuality
{
    //Use comverted image from self.captureCommand onComplete
    UIImage *image = [[UIImage alloc] initWithData:processedBitmap];
    [self saveImage:image];
}
Run Code Online (Sandbox Code Playgroud)

以下是值的屏幕截图:

Imgur

那么,我如何将这些字节(或者它们是什么)转换成我可以填充到UIImage中的东西呢?

预先感谢您的帮助.

-------------------------------------------------- ----- 添加新图像 -----------------------------------------

我的字节

这个新图片有帮助吗?

谢谢.

opencv objective-c uiimage dispatch-async

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

从'requestImageForAsset'返回的UIImage大小甚至不接近'targetSize'设置

我已经彻底阅读了最新的iOS8相框工作,我正在尝试从用户库中获取一些资产来显示.我让用户一次编辑4张图片.但正因为如此,我需要压缩图像,否则应用程序将崩溃.

我使用PHImageManager通过以下代码加载图像:

func processImages()
    {
        println("Processing")
        _selectediImages = Array()
        _cacheImageComplete = 0
        for asset in _selectedAssets
        {
            var options:PHImageRequestOptions = PHImageRequestOptions()
            options.version = PHImageRequestOptionsVersion.Unadjusted
            options.synchronous = true
            var minRatio:CGFloat = 1
            if(CGFloat(asset.pixelWidth) > UIScreen.mainScreen().bounds.width || CGFloat(asset.pixelHeight) > UIScreen.mainScreen().bounds.height)
            {
               minRatio = min(UIScreen.mainScreen().bounds.width/(CGFloat(asset.pixelWidth)), (UIScreen.mainScreen().bounds.height/CGFloat(asset.pixelHeight)))
            }
            var size:CGSize = CGSizeMake((CGFloat(asset.pixelWidth)*minRatio),(CGFloat(asset.pixelHeight)*minRatio))
            println("Target size is \(size)")
            PHImageManager.defaultManager().requestImageForAsset(asset, targetSize:size, contentMode: .AspectFill, options: options)
                {
                    uiimageResult, info in
                    var image = iImage(uiimage: uiimageResult)
                    println("Result Size Is \(uiimageResult.size)")
            }

        }

    }
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在计算目标大小,以确保图像至少不比屏幕大.如果是,我会在图像上缩小比例.但是这是典型的打印日志

对象尺寸为(768.0,798.453531598513)结果大小是(1614.0,1678.0)

即使我将目标大小设置为768x798(在特定情况下),它给我的最终UIImage也是它的两倍多.现在根据文档中的targetSize参数

"要返回的图像的目标大小."

不是最清楚的解释,但从我的实验来看,它不符合这一点.

如果您有一些建议,我很乐意听到它!

memory-management uiimage ios swift phasset

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

UIImage循环通过像素非常低效?

目前我正在使用此方法遍历每个像素,并根据RGB值将值插入到3D数组中.我需要这个数组用于我程序的其他部分,但它非常慢.当在50 x 50的图片上运行时,它几乎是即时的,但是一旦你开始进入数百甚至数百,它需要很长时间才能达到应用无用的程度.任何人对如何加快我的方法有任何想法?

@IBAction func convertImage(sender: AnyObject) {
    if let image = myImageView.image {

        var pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage))
        var data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

        let height = Int(image.size.height)
        let width = Int(image.size.width)
        var zArry = [Int](count:3, repeatedValue: 0)
        var yArry = [[Int]](count:width, repeatedValue: zArry)
        var xArry = [[[Int]]](count:height, repeatedValue: yArry)

        for (var h = 0; h < height; h++) {
            for (var w = 0; w < width; w++) {
                 var pixelInfo: Int = ((Int(image.size.width) * Int(h)) + Int(w)) * 4 …
Run Code Online (Sandbox Code Playgroud)

arrays uiimage ios swift

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

使用drawInRect调整图像大小,同时保持像Scale Aspect Fill一样的宽高比?

我想用drawInRect方法调整图像大小,但我还想保持正确的宽高比,同时完全填充给定的帧(如.ScaleAspectFill对UIViewContentMode所做的那样).任何人都有一个现成的答案吗?

这是我的代码(非常简单......):

func scaled100Image() -> UIImage {
    let newSize = CGSize(width: 100, height: 100)
    UIGraphicsBeginImageContext(newSize)
    self.pictures[0].drawInRect(CGRect(x: 0, y: 0, width: 100, height: 100))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage
}
Run Code Online (Sandbox Code Playgroud)

uiimage ios swift

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

获取仅绘制特定区域边界的UIImage - PaintView

我已经使用以下方法实现了绘画/绘画:

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
-(void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event
- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event
Run Code Online (Sandbox Code Playgroud)

现在的问题是,对于任何绘制的线,我想得到那个特定的线/油漆图像.我不想要整个屏幕的图像,只需要绘制线条/绘图的区域/边界.

原因是我想在该行/绘制的绘图上执行平移手势/删除功能.

用户可以绘制多条线,因此需要分别UIImage使用所有这些线.

任何逻辑或代码片段都会非常有用

提前致谢

iphone paint objective-c uiimage ios

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

在Share Extension(Swift)中处理NSItemProvider数据类型

我在Swift(3)中遇到Share Extension编程问题. 我的主要问题是处理NSItemProvider的类型. 这是问题所在:根据我启动扩展程序的应用程序,我得到了不同类型的数据.例如: 我告诉应用程序:
data


let IMAGE_TYPE = kUTTypeImage as String
if attachment.hasItemConformingToTypeIdentifier(IMAGE_TYPE){
     attachment.loadItem(forTypeIdentifier: IMAGE_TYPE, options: nil){ data, error in
     ...
}
Run Code Online (Sandbox Code Playgroud)

(注意:附件的类型为NSItemProvider)

当从照片应用程序执行时,data是一个URL,所以我从中创建一个UIImage并继续.
问题是,对于某些应用程序data已经是UIImage,我无法找到如何区分大小写.
最好的可能是检查data对象的数据类型,但至少对我来说并不是微不足道的.
在此先感谢您的帮助!

uiimage nsdata ios swift

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

UIImagePickerControllerEditedImage为iOS 11编辑了图像偏移量

我使用的是UIImagePickerController具有allowsEditing能够在共享一个应用程序的图像,却发现裁剪的图像用于运行iOS仅11偏移的设备.

我的UIImagePickerControllerDelegate实现非常简单,只是标准操作:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let image = info[UIImagePickerControllerEditedImage] as! UIImage

    imageView.image = image
    picker.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

下面你可以看到差异.iOS 10在右侧,iOS 11在左侧.您可以看到iOS 11图像向下偏移,即使裁剪矩形放在完全相同的位置.

iOS 10 vs iOS 11编辑的图像

这里是一个视频演示该问题:https://www.dropbox.com/s/4csofidjcrc9ah6/UIImagePickerControllerEditedImageOffset.mp4?dl=0

我还在GitHub上创建了一个演示项目来演示这个问题:https://github.com/aivars/photo-Picker-Tests

我猜这是UIImagePickerController错误,但想知道为什么不在网上找到任何其他错误报告.

我还向Apple提交了一份错误报告:http://www.openradar.me/36292067

uiimageview uiimagepickercontroller uiimage ios11

10
推荐指数
0
解决办法
1045
查看次数

UIColor(named :)在iOS 11.0-11.2上始终返回nil

我有一个从我的自定义调色板返回UIColor的类。我以编程方式调用此方法,但是当我在iOS 11上对其进行测试时,它始终会返回nil结果...我在多种设备和OS版本11.0、11.0.1、11.2上尝试了此操作,并且所有方法都返回nil。但是,只要我在> iOS 12上运行它们,它就会始终返回正确的颜色。

var color: UIColor? {
    switch self {
    case .darkIndigo: return UIColor(named: "darkIndigo")
    case .lightNavy: return UIColor(named: "lightNavy")
    case .cobalt: return UIColor(named: "cobalt")
    }
}
Run Code Online (Sandbox Code Playgroud)

我最近更改了应用程序的包ID ...,这使我认为这与使用多个包时UIImage存在的类似问题有关。特别是当我收到错误消息时

警告:无法从以下任何捆绑包中解析名为“ darkIndigo”的颜色:

但是,应该如何解决呢?我是否应该手动删除整个资产目录并将其重新添加?

uiimage ios swift ios11

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