컨텍스트 내부에 사각형에 해당하는 CGImage
을 만드는 방법이 있는지 궁금합니다. 컨텍스트에서 서브 이미지 만들기
CGImage
를 만들
CGBitmapContextCreateImage
을 사용하고
. 그런 다음 서브 이미지를 추출하려면 CGImageCreateWithImageInRect
을 사용합니다.
아닐
컨텍스트 내부에 사각형에 해당하는 CGImage
을 만드는 방법이 있는지 궁금합니다. 컨텍스트에서 서브 이미지 만들기
CGImage
를 만들
CGBitmapContextCreateImage
을 사용하고
. 그런 다음 서브 이미지를 추출하려면 CGImageCreateWithImageInRect
을 사용합니다.
아닐
이 시도 :
static CGImageRef createImageWithSectionOfBitmapContext(CGContextRef bigContext,
size_t x, size_t y, size_t width, size_t height)
{
uint8_t *data = CGBitmapContextGetData(bigContext);
size_t bytesPerRow = CGBitmapContextGetBytesPerRow(bigContext);
size_t bytesPerPixel = CGBitmapContextGetBitsPerPixel(bigContext)/8;
data += x * bytesPerPixel + y * bytesPerRow;
CGContextRef smallContext = CGBitmapContextCreate(data,
width, height,
CGBitmapContextGetBitsPerComponent(bigContext), bytesPerRow,
CGBitmapContextGetColorSpace(bigContext),
CGBitmapContextGetBitmapInfo(bigContext));
CGImageRef image = CGBitmapContextCreateImage(smallContext);
CGContextRelease(smallContext);
return image;
}
나이 :
static CGImageRef createImageWithSectionOfBitmapContext(CGContextRef bigContext,
size_t x, size_t y, size_t width, size_t height)
{
uint8_t *data = CGBitmapContextGetData(bigContext);
size_t bytesPerRow = CGBitmapContextGetBytesPerRow(bigContext);
size_t bytesPerPixel = CGBitmapContextGetBitsPerPixel(bigContext)/8;
data += x * bytesPerPixel + y * bytesPerRow;
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, data,
height * bytesPerRow, NULL);
CGImageRef image = CGImageCreate(width, height,
CGBitmapContextGetBitsPerComponent(bigContext),
CGBitmapContextGetBitsPerPixel(bigContext),
CGBitmapContextGetBytesPerRow(bigContext),
CGBitmapContextGetColorSpace(bigContext),
CGBitmapContextGetBitmapInfo(bigContext),
provider, NULL, NO, kCGRenderingIntentDefault);
CGDataProviderRelease(provider);
return image;
}
here 언급 한 바와 같이 다음과 같이 예를 들어
, 자른 이미지를 만들 수 있습니다 : -
UIImage *image = //original image
CGRect rect = //cropped rect
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
당신이 위의 코드를 사용하는 상황에서의 CGImage를 얻을 필요 그것을 자르십시오. 질문에서 언급 한대로 CGBitmapContextCreateImage
을 사용할 수 있습니다. 여기에 the documentation.
나는'CGContext'에서 이미지 데이터를 가지고있다. 그 문맥 안의 직사각형 영역에서 이미지를 만들고 싶습니다. UIImage 내부가 아닌. –
그럴 경우 먼저 CGImage를 만든 다음 위의 코드를 사용하여 자르기해야합니다. – iDev
오버 헤드가 많은 것처럼 보입니다. 그렇지 않니? 실시간으로 터치 나 비슷한 것을 기반으로 컨텍스트를 동적으로 변경하려면 경험이 저하되는 경향이 있습니다. –
할당 한 버퍼로 CGBitmapContext를 만들고 동일한 버퍼를 사용하여 처음부터 CGImage를 만들 수 있습니다. 컨텍스트와 버퍼를 공유하는 이미지를 사용하여 컨텍스트에 그려 넣은 다음 마스터 이미지의 해당 섹션을 사용하여 CGImage를 만들 수 있습니다.
나중에 동일한 컨텍스트를 그리면 잘린 이미지가 실제로 변경 사항을 인식 할 수 있습니다 (복사 대신 공유 대신 참조가 내부적으로 진행되는 정도에 따라 다름). 당신이하고있는 것에 따라, 당신은 이것이 바람직 할 수도 있고 그렇지 않을 수도 있습니다.
'CGImage'는 변경할 수 없습니다. 하나를 만들면 비트 맵 데이터의 개인 복사본을 만듭니다. –
그건 꽤 우아한 해결책이고 내 경우에는 효과가 있습니다! 감사. –
첫 번째 기능에 버그가있었습니다. 나는 그것을 고쳤다. 아마 두 번째 기능을 사용하고 있었을 것입니다. –
첫 번째 기능을 사용하고있었습니다. 그래, 그 벌레를 보았지 만, 그 주된 생각은 내가 빌린 것이었다. 감사! 나는 한 가지를 지적해야합니다. 나는 이전의 구현 (질문에서 언급 한 바와 같이)과 사용자 경험 측면에서 많은 차이를 볼 수 없었다. 아마도 병목 현상이 다른 곳에서 발생했을 것입니다. –