Ios 图像缩放CGDataProviderCopyData
更新1 描述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
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的图像,但是当我给imageRefnum
它得到一个104乘104的图像,当我给imageRefcon
它得到一个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);