2010-07-19 6 views
1

세 개의 UIImages가 하나씩 다른 세 개의 UIScrollviews에 추가되었습니다. 두 스크롤 뷰 사이에있는 인접한 가장자리를 흐리게 처리하는 방법을 찾으려고하지만이를 수행 할 방법을 찾을 수 없습니다.아이폰에서 이미지 가장자리를 어둡게하는 방법

누군가이 방법을 제안 할 수 있습니까? 어떤 도움이

을 이해할 수있을 것이다

당신은 이미지를 흐리게 일부 가우스을 할 수있는 당신에게

Shumais UL 하크

답변

0

감사드립니다. 이 질문을했습니다 before.

static void blur(V2fT2f *quad, float t) // t = 1 
{ 
    GLint tex; 
    V2fT2f tmpquad[4]; 
    float offw = t/Input.wide; 
    float offh = t/Input.high; 
    int i; 

    glGetIntegerv(GL_TEXTURE_BINDING_2D, &tex); 

    // Three pass small blur, using rotated pattern to sample 17 texels: 
    // 
    // .\/.. 
    // ./\\/ 
    // \/X/\ rotated samples filter across texel corners 
    // /\\/. 
    // ../\. 

    // Pass one: center nearest sample 
    glVertexPointer (2, GL_FLOAT, sizeof(V2fT2f), &quad[0].x); 
    glTexCoordPointer(2, GL_FLOAT, sizeof(V2fT2f), &quad[0].s); 
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
    glColor4f(1.0/5, 1.0/5, 1.0/5, 1.0); 
    validateTexEnv(); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

    // Pass two: accumulate two rotated linear samples 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE); 
    for (i = 0; i < 4; i++) 
    { 
     tmpquad[i].x = quad[i].s + 1.5 * offw; 
     tmpquad[i].y = quad[i].t + 0.5 * offh; 
     tmpquad[i].s = quad[i].s - 1.5 * offw; 
     tmpquad[i].t = quad[i].t - 0.5 * offh; 
    } 
    glTexCoordPointer(2, GL_FLOAT, sizeof(V2fT2f), &tmpquad[0].x); 
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 
    glActiveTexture(GL_TEXTURE1); 
    glEnable(GL_TEXTURE_2D); 
    glClientActiveTexture(GL_TEXTURE1); 
    glTexCoordPointer(2, GL_FLOAT, sizeof(V2fT2f), &tmpquad[0].s); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glBindTexture(GL_TEXTURE_2D, tex); 
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB,  GL_INTERPOLATE); 
    glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB,   GL_TEXTURE); 
    glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB,   GL_PREVIOUS); 
    glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB,   GL_PRIMARY_COLOR); 
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB,  GL_SRC_COLOR); 
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
    glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA,  GL_PRIMARY_COLOR); 

    glColor4f(0.5, 0.5, 0.5, 2.0/5); 
    validateTexEnv(); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

    // Pass three: accumulate two rotated linear samples 
    for (i = 0; i < 4; i++) 
    { 
     tmpquad[i].x = quad[i].s - 0.5 * offw; 
     tmpquad[i].y = quad[i].t + 1.5 * offh; 
     tmpquad[i].s = quad[i].s + 0.5 * offw; 
     tmpquad[i].t = quad[i].t - 1.5 * offh; 
    } 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

    // Restore state 
    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    glClientActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, Half.texID); 
    glDisable(GL_TEXTURE_2D); 
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB,  GL_SRC_ALPHA); 
    glActiveTexture(GL_TEXTURE0); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glDisable(GL_BLEND); 
} 
+0

답장을 보내 주셔서 감사합니다. 나는 연결된 스레드를 읽었습니다. 내가 아는 바로는 전체 이미지가 흐려집니다. 그건 내가 찾는 것이 아니다. 스크롤 뷰의 내용 모서리를 흐리게 처리해야합니다. imaeg의 어떤 부분이 표시되는지는 중요하지 않습니다. 이미지의 표시된 부분에 흐리게 표시된 가장자리가 있어야합니다. 두 스크롤보기 사이의 가장자리를 흐리게 만들려고합니다. 그래서 A가 첫 번째 scrollview이고 B가 두 번째이고 AAAABBB로 표시되면 중간에 AB를 흐리게 표시하고 싶습니다. 지금 내 질문이 더 분명해지기를 바랍니다. 감사합니다! –

+0

그런 방법으로 흐리게 처리됩니다. 그 가장자리에 그 지식을 적용하십시오 :) – willcodejavaforfood

+0

그냥 원래 이미지를 자르고 흐리게 하나 위에 붙여 넣으면 가장자리가 흐려집니다. – gtrak

0

CALayer.mask를 사용하여 "마스크 레이어"를 설정하여 투명 영역을 추가 할 수 있습니다. 가장자리를 더 투명하게 지정하려면 스크롤보기 (예 : #import <QuartzCore/CALayer.h> ... scrollView.layer.mask = whatever)에서이 값을 설정하십시오.

레이어 마스크의 크기가 자동으로 조정되는지 기억이 나지 않습니다. 또한 이전 기기 (예 : 3G)에서도 성능이 떨어집니다. 그래도 원하는대로 할 수 있습니다.

+0

감사합니다. 나는 그것을 조사 할 것이고, 바라건대 그것이 내가 원하는 것을 할 수있다. 다시 한번 감사드립니다. –

+0

@ tc 조금 더 설명해 주시거나 약간의 샘플 코드를 제공 해주시겠습니까? –

관련 문제