iOS 이미지 관련 (읽 기, 저장, 그리 기, 기타 관련)
1. 자원 (resource) 에서 읽 기
UIImage* image=[UIImage imageNamed:@"1.jpg"];
2. 네트워크 에서 읽 기
NSURL *url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"];
UIImage *imgFromUrl =[[UIImage alloc]initWithData:[NSData dataWithContentsOfURL:url]];
3. 휴대폰 로 컬 에서 읽 기
// resource
NSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];
UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3];
UIImageView* imageView3=[[UIImageView alloc]initWithImage:imgFromUrl3];
4. 기 존 context 에서 그림 가 져 오기
//add ImageIO.framework and #import <ImageIO/ImageIO.h>
CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
//transformCTM 2
//CGContextConcatCTM(ctx, CGAffineTransformMakeScale(.2, -0.2));
//CGContextScaleCTM(ctx,1,-1);
// , ctx
CGImageRef capture=CGBitmapContextCreateImage(ctx);
CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);
CGContextDrawImage(ctx, CGRectMake(160, 230, 160, 230), img);
CGImageRef capture2=CGBitmapContextCreateImage(ctx);
5. Quartz 의 CGImageSourceRef 로 그림 읽 기CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
그림 저장
1. NSData 로 변환 하여 그림 저장 (imgFromUrl 은 UIImage)
// 2
//NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//NSString*documentsDirectory=[paths objectAtIndex:0];
//NSString*aPath=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",@"test"]];
NSString *aPath=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];
NSData *imgData = UIImageJPEGRepresentation(imgFromUrl,0);
[imgData writeToFile:aPath atomically:YES];
2. Quartz 의 CGImageDestinationRef 로 그림 을 출력 하 는 방식 은 흔 치 않 기 때문에 소 개 를 하지 않 습 니 다. 자세 한 내용 은 apple 문서 Quartz 2D Programming Guide 를 볼 수 있 습 니 다.
3. 그림 그리 기 (draw | painting)
1. UIImageView 방식 으로 UIView 층 에 가입
UIImageView* imageView=[[UIImageView alloc]initWithImage:image];
imageView.frame=CGRectMake(0, 0, 320, 480);
[self addSubview:imageView];
[imageView release];
2. [img drawAtPoint] 시리즈 방법
[image4 drawAtPoint:CGPointMake(100, 0)];
3.CGContextDrawImage
CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);
4.CGLayer 이것 은 애플 이 추천 하 는 offscreen 그리 기 방법 입 니 다. bitmapContext 보다 더 좋 습 니 다. 아이 폰 하드웨어 (drawing - card) 를 이용 하여 속 도 를 낼 것 같 기 때 문 입 니 다.
CGLayerRef cg=CGLayerCreateWithContext(ctx, CGSizeMake(320, 480), NULL);
// CGLayerContext context,
CGContextRef layerContext=CGLayerGetContext(cg);
CGContextDrawImage(layerContext, CGRectMake(160, 230, 160, 230), img);
CGContextDrawLayerAtPoint(ctx, CGPointMake(0, 0), cg);
5. CALayer 의 contentsUIImage* image=[UIImage imageNamed:@"1.jpg"];
CALayer *ly=[CALayer layer];
ly.frame=CGRectMake(0, 0, 320, 460);
ly.contents=[image CGImage];
[self.layer addSublayer:ly];
기타
1. CGImage 와 UIImage 교환
이렇게 하면 UIKit 와 Quartz 사이 의 유형 을 수시로 전환 하고 익숙 한 방식 으로 그림 을 처리 할 수 있 습 니 다.
CGImage cgImage=[uiImage CGImage];
UIImage* uiImage=[UIImage imageWithCGImage:cgImage];
질문
44x 29 의 그림 을 가정 하면 같은 Insets = UIEdgeInsets Make (10, 10, 10, 10) 는 @ 2x 상황 과 비 @ 2x 상황 에서 표현 이 다 를 수 있 습 니 다. 비 @ 2x 는 OK 정상 입 니 다. 그러나 같은 사이즈 의 그림 이 @ 2x 로 바 뀌 면 전환 과 도 를 할 때 끊 기 고 서로 다른 재 그림 으로 인해 발생 할 수 있 습 니 다. 표면 원인 은 Insets 설정 의 점, @ 2x 상황 에서 스 트 레 칭 되 기 때 문 입 니 다.사실 올 라 가 는 픽 셀 은 위 20, 아래 20 이지 만 그림 은 사실 29 에 불과 하기 때문에 정확 하지 않 습 니 다. 인 스타 그램 을 = UIEdgeInsets Make (5, 10, 5, 10) 로 설정 하면 정상 이 므 로 앞으로 주의해 야 합 니 다.
3. 애니메이션 이미지 사용 주의
animation Image 설정 이 끝 난 후 startAnimation. 애니메이션 그림 을 자동 으로 시작 하지 않 습 니 다.
또한 대량의 애니메이션 그림 을 읽 을 때 이 방법 을 사용 하기에 적합 하지 않다. 왜냐하면 한꺼번에 많은 그림 이 터 지기 쉽 기 때문이다.이 방법 으로 대체 할 수 있 습 니 다. 구체 적 으로 저도 시도 하지 않 았 습 니 다. 방법 은 바로 수 동 으로 그림 을 전환 하 는 것 입 니 다. 시스템 방법 을 직접 사용 하 는 것 이 아 닙 니 다.
imgV=[[UIImageView alloc]initWithFrame:CGRectMake(40, 40, 128, 128)];
[self.window addSubview:imgV];
[self performSelectorInBackground:@selector(playAnim)withObject:nil];
[imgV release];
-(void)playAnim{
for (int i=0;i<101;){
usleep(100000);
UIImage *image=[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d",i+1 ] ofType:@"tiff"]];
[self performSelectorOnMainThread:@selector(changeImage:) withObject:image waitUntilDone:YES];
i++;
}
}
-(void)changeImage:(UIImage*)image{
imgV.image=image;
}
관련 게시 물:http://www.cocoachina.com/bbs/read.php?tid=110154
4. UIControl 설정 UIImage
문제 설명 은 주로 아주 작은 포크 버튼 이 있 는데 큰 클릭 구역 에 응답 해 야 합 니 다. 이것 은 간단 합 니 다. 코드 는 다음 과 같 습 니 다.
UIImage *bg=[UIImage imageNamed:@"heizi1.jpg"];
// ,
bg=[self scaleImage:bg ToSize:(CGSize){100,100}];
UIButton* button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
// button, , button
[button setImage:bg forState:UIControlStateNormal];
그 밖 에 한 마디 더 하 겠 습 니 다. 이 icon 그림 은 2 세트 그림 을 준비 하려 면 크기 를 조정 하 는 것 이 효율 적 입 니 다.그림 코드 크기 조정
-(UIImage *)scaleImage:(UIImage *)img ToSize:(CGSize)itemSize{
UIImage *i;
// CGSize itemSize=CGSizeMake(30, 30);
UIGraphicsBeginImageContext(itemSize);
CGRect imageRect=CGRectMake(0, 0, itemSize.width, itemSize.height);
[img drawInRect:imageRect];
i=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return i;
view 에서 캡 처#import <QuartzCore/QuartzCore.h>
-(UIImage *)getImageFromView:(UIView *)orgView{
UIGraphicsBeginImageContext(orgView.bounds.size);
[orgView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.