Ios 图像缩放CGDataProviderCopyData

Ios 图像缩放CGDataProviderCopyData,ios,xcode,image-processing,Ios,Xcode,Image Processing,更新1 描述CGDataProviderCopyData。我想这就是我最初所问的,从上下文中提取一个图形并提取像素值 示例代码使用了CGImageGetDataProvider和一些我不了解的其他功能,因此我无法理解如何实现它们的功能。如何从变量con或其上下文获取信息并访问像素 更新1 更新0 // // BSViewController.m #import "BSViewController.h" @interface BSViewController () @end @implem

更新1

描述CGDataProviderCopyData。我想这就是我最初所问的,从上下文中提取一个图形并提取像素值

示例代码使用了
CGImageGetDataProvider
和一些我不了解的其他功能,因此我无法理解如何实现它们的功能。如何从变量
con
或其上下文获取信息并访问像素

更新1

更新0

//
//  BSViewController.m

#import "BSViewController.h"

@interface BSViewController ()
@end

@implementation BSViewController


- (IBAction) chooseImage:(id) sender{


    [self.view addSubview:self.imageView];
    UIImage* testCard = [UIImage imageNamed:@"ipad 7D.JPG"];
    CGSize sz = [testCard size];
    CGImageRef num = CGImageCreateWithImageInRect([testCard CGImage],CGRectMake(532, 0, 104, 104));
    UIGraphicsBeginImageContext(CGSizeMake( 250,650));
    CGContextRef con = UIGraphicsGetCurrentContext();
    CGContextDrawImage(con, CGRectMake(0, 0, 13, 13) ,num);
    UIGraphicsEndImageContext();
    self.workingImage = CFBridgingRelease(num);
    CGImageRelease(num);
也许我问错了问题
CGContextDrawImage
在我的例子中,将图像从104×104缩放到13×13,但随后
CGContextDrawImage
显示图像。也许我需要找到
CGContextDrawImage
的一部分,它只是进行缩放

我在“UIImage类参考”中找到了
initWithData:scale:
。但我不知道如何为这种方法提供数据。我要的刻度是0.25

- (id)initWithData:(NSData *)data scale:(CGFloat)scale
有人能告诉我如何为我的应用程序提供
(NSData*)数据吗

更新0

//
//  BSViewController.m

#import "BSViewController.h"

@interface BSViewController ()
@end

@implementation BSViewController


- (IBAction) chooseImage:(id) sender{


    [self.view addSubview:self.imageView];
    UIImage* testCard = [UIImage imageNamed:@"ipad 7D.JPG"];
    CGSize sz = [testCard size];
    CGImageRef num = CGImageCreateWithImageInRect([testCard CGImage],CGRectMake(532, 0, 104, 104));
    UIGraphicsBeginImageContext(CGSizeMake( 250,650));
    CGContextRef con = UIGraphicsGetCurrentContext();
    CGContextDrawImage(con, CGRectMake(0, 0, 13, 13) ,num);
    UIGraphicsEndImageContext();
    self.workingImage = CFBridgingRelease(num);
    CGImageRelease(num);
我正在进行从上到下的过渡

更具体地说,我需要为imageRef提供正确的输入。我想给imageRef一个13乘13的图像,但是当我给imageRef
num
它得到一个104乘104的图像,当我给imageRef
con
它得到一个0乘0的图像。(下面提到了另一种尝试性方法。)


我改了2行,加了3行,得到了我想要的结果。 主要的变化是使用
UIGraphicsBeginImageContextWithOptions
而不是
UIGraphicsBeginImageContext
,这样可以在绘制图像之前进行重缩放

@implementation BSViewController


- (IBAction) chooseImage:(id) sender{


    [self.view addSubview:self.imageView];
    UIImage* testCard = [UIImage imageNamed:@"ipad 7D.JPG"];
    CGSize sz = [testCard size];
    CGImageRef num = CGImageCreateWithImageInRect([testCard CGImage],CGRectMake(532, 0, 104, 104));
    UIGraphicsBeginImageContextWithOptions(CGSizeMake( 104,104), NO, 0.125);  // Changed
    CGContextRef con = UIGraphicsGetCurrentContext();
    CGContextDrawImage(con, CGRectMake(0, 0, 104, 104) ,num);  // Changed
    UIImage* im = UIGraphicsGetImageFromCurrentImageContext();  // Added
    UIGraphicsEndImageContext();
    self.workingImage = CFBridgingRelease(num);
    CGImageRelease(num);


    UIImageView* iv = [[UIImageView alloc] initWithImage:im];   // Added
    [self.imageView addSubview: iv];  // Added
    CGImageRef imageRef = [im CGImage];
    NSUInteger width = CGImageGetWidth(imageRef);
    NSUInteger height = CGImageGetHeight(imageRef);

等等。

我能问个愚蠢的问题吗?这些图像缩放的最终结果是什么?你想缩放图像吗?如果这是真的,那么最好将
UIImageView
的frame属性更改为13x13,它会自动缩放图像吗?对不起,如果我没有得到你的想法,请你描述一下。不,我需要实际数据,甚至不想显示结果。您可以从代码中看到,我需要“rawData”,以便尝试识别它。我刚刚偶然发现了
UIGraphicsBeginImageContextWithOptions
。那是什么?“使用指定选项创建基于位图的图形上下文。”选项包括缩放。请查看我编辑的问题,其中询问如何在我的代码上实现
CGDataProviderCopyData
@implementation BSViewController


- (IBAction) chooseImage:(id) sender{


    [self.view addSubview:self.imageView];
    UIImage* testCard = [UIImage imageNamed:@"ipad 7D.JPG"];
    CGSize sz = [testCard size];
    CGImageRef num = CGImageCreateWithImageInRect([testCard CGImage],CGRectMake(532, 0, 104, 104));
    UIGraphicsBeginImageContextWithOptions(CGSizeMake( 104,104), NO, 0.125);  // Changed
    CGContextRef con = UIGraphicsGetCurrentContext();
    CGContextDrawImage(con, CGRectMake(0, 0, 104, 104) ,num);  // Changed
    UIImage* im = UIGraphicsGetImageFromCurrentImageContext();  // Added
    UIGraphicsEndImageContext();
    self.workingImage = CFBridgingRelease(num);
    CGImageRelease(num);


    UIImageView* iv = [[UIImageView alloc] initWithImage:im];   // Added
    [self.imageView addSubview: iv];  // Added
    CGImageRef imageRef = [im CGImage];
    NSUInteger width = CGImageGetWidth(imageRef);
    NSUInteger height = CGImageGetHeight(imageRef);