문제

CGCONTEXTREF를 사용하여 이미지에 약간의 변환을 적용하려고합니다. CGCONTEXTTRANSLATECTM, CGCONTEXTSCALECTM 및 CGCONTEXTROTATECTM 기능을 사용하고 있지만 단순한 것을 유지하려면 첫 번째에만 집중할 수 있습니다. 다음 코드가 왜 원본 이미지를 정확히 생성하는지 궁금합니다! 내가 뭔가를 놓치고 있습니까?

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef g = CGBitmapContextCreate((void*) pixelData, 
                                                       width, 
                                                       height, 
                                                       RGBA_8_BIT, 
                                                       bytesPerRow, 
                                                       colorSpace, 

                                                   kCGImageAlphaPremultipliedLast);

CGContextSetShouldAntialias(g, YES);

CGContextSetInterpolationQuality(g, kCGInterpolationHigh);

CGContextTranslateCTM( g,translateX, translateY );


CGImageRef tempImg  = CGBitmapContextCreateImage (g);
CGContextDrawImage( g, CGRectMake (0, 0, width, height), tempImg );
CGContextRelease(g);
CGColorSpaceRelease( colorSpace );

또한 번역 후,이 이미지를 다른 이미지 위에 그리는 방법이지만 부분 투명성 (예 : 알파 = 0.5).

나는 많이 검색했지만 대답을 찾지 못했습니다. 어떤 도움도 감사합니다 ... :)

PixelData에서 컨텍스트를 작성하고 있으며 해당 Tempimg은 번역 후 생성됩니다. 원래 이미지가 현재 생성되고 있기 때문에 초기화에는 아무런 문제가 없지만 문제는 내가 생각하는 번역에 관한 것입니다.

도움이 되었습니까?

해결책

그래픽 상태로의 변환은 후속 드로잉 작업에만 영향을 미칩니다. 기존 이미지 데이터를 변경하지 않습니다. 이미지에 변환을 적용하려면 다음과 같은 것을 시도하십시오.

  1. 빈 cgcontext를 만듭니다 (iPhone에서 uigraphicsbeginimagecontext 사용).
  2. 그래픽 상태를 번역, 스케일 또는 회전
  3. 기존 이미지를 그 안에 그립니다.
  4. 새로운 cgcontext에서 이미지 가져 오기 (iPhone에서 uigraphicsgetImagefffomcurrentimageContext를 사용하십시오)

3 단계를 수행하면 기존 이미지가 적용된 변환과 함께 새로운 그래픽 컨텍스트로 그려집니다. 여기서 속임수는 변형을 적용하기 위해서는 실제로 무언가를 그려야한다는 것입니다.

이런 식으로 변형으로 정말 멋진 일을 할 수 있습니다. 이미지의 절반을 그릴 수 있고 변환을 적용하고 더 많이 그릴 수 있습니다.

다른 팁

다른 답변에서 언급 한 바와 같이, 변환은 후속 드로잉 작업에만 적용됩니다. 그들은 당신이 시작한 픽셀 버퍼에 영향을 미치지 않습니다.

따라서 드로잉 작업이 필요합니다. 해결책은해야합니다 cgimage를 만듭니다; 그 이미지를 그립니다 드로잉 작업이므로 전류 변환 매트릭스 (CTM)가 적용됩니다.

단계별 :

  1. 컨텍스트를 만듭니다 비어 있는 픽셀 데이터. (당신이 지나가는 경우 NULL 버퍼의 경우 쿼츠가 당신을 위해 만들어야합니다. 어쨌든 그것은 Mac에서 작동합니다.)
  2. 변환하려는 픽셀 데이터로 이미지를 만듭니다.
  3. 컨텍스트에서 CTM을 변환하십시오.
  4. 이미지를 그립니다.

cgbitmapcontextcreateimage () 호출해야합니다. ~ 후에 당신은 이미지를 그립니다.

그런 다음 첫 번째 이미지 위에 다른 이미지를 그려서 CGBitMapContextCreateImage ()를 다시 호출하여 두 번째 이미지를 얻을 수 있습니다. CGCONTEXTSETALPHA (CTX, alphavalue)를 사용하여 알파를 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top