다양한 텍스트 및 이미지 요소가 포함 된보기를 작성합니다.iPhone보기에서 흐린 텍스트를 만드는 방법은 무엇입니까?
텍스트 그림자가 아니라 텍스트 뒤에 흐린 복사본이있는보기에 일부 텍스트를 표시하려고합니다.
가우스 흐리게 처리 된 텍스트를 UIImage 또는 레이어에 어떻게 적용합니까?
다양한 텍스트 및 이미지 요소가 포함 된보기를 작성합니다.iPhone보기에서 흐린 텍스트를 만드는 방법은 무엇입니까?
텍스트 그림자가 아니라 텍스트 뒤에 흐린 복사본이있는보기에 일부 텍스트를 표시하려고합니다.
가우스 흐리게 처리 된 텍스트를 UIImage 또는 레이어에 어떻게 적용합니까?
데스크톱에서는 아무런 문제가 없으므로 CoreImage를 사용하십시오.
그러나 CoreGraphics를 사용하여 전화를 걸 수있는 방법이 있다고 생각하지 않습니다. OpenGLES가 절대적으로 비판적 일 수 있다면 도움이 될 것입니다.
그러나 인터페이스를 다시 생각해 보시기 바랍니다. 흐리게 표시된 텍스트가 혼란 스럽다고 생각합니다.
편집 : mledford는 CoreAnimation을 사용할 수 있다는 의견을 지적합니다. 휴대 전화의 CA가 바탕 화면과 같이 흐려지는 반경을 포함하는지 여부는 알 수 없지만 시도해 볼 수는 있습니다.
iPhone OS는 내가 아는 핵심 이미지 필터를 제공하지 않습니다. 그렇지 않으면 예, 필터링 된 CALayer가 올바른 방법 일 것입니다. NSBitmapImageRep을 사용할 수 있다면 텍스트를 드로잉하고 이미지를 축소 (다운 샘플링) 한 다음 이미지를 다시 확대 (업 샘플링)하여 원시 블러를 만들 수 있습니다. 불행히도 누락 된 것 같습니다. 플래시에서 텍스트가 흐릿 해 보이는 것을 보았습니다. 마지막으로 확인한 결과 픽셀 수준의 필터링은 없습니다. 당신은 그것에 대한 튜토리얼을 찾고 Cocoa Touch에 적응할 수있는 것을 볼 수도 있습니다.
알파 레이어를 사용하면 성능이 저하됩니다. 가능한 경우 다른 방법을 고려하십시오 (어쩌면 텍스트를 사전 조합하여 여러 레이어 대신 그래픽으로 병합 할 수도 있습니다).
성능을 시험하고 수용 가능한지 보려면 Instruments를 사용하십시오. 스크롤보기로 스크롤하면 로으로 스크롤됩니다.
Apple의 GLImageProcessing iPhone 샘플을 살펴보십시오. 그것은 무엇보다도 흐리게 처리합니다.
관련 코드가 포함
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);
}
간단한 코코아 터치 응용 프로그램에서 openGL ES보기를 사용하지 않고도 OpenGL ES를 사용할 수 있다고 가정하는 것이 맞습니까? 해당 블러 필터링에만 openGL을 사용할 수 있습니까? 출력을 UIImage에 쓸 수 있습니까? –
아니요, 코드를 보았을 때 약간의 EAGLView와 glview를 회상하는 것 같습니다. 위의 코드보다 훨씬 멋진 흐림을 생성하는 다음 URL에서 코드를 실험하고 있습니다. http://incubator.quasimondo.com /processing/fast_blur_deluxe.php – mahboudz
그것은 진부한 것이 아닙니다. t,하지만 UILabels 또는 텍스트를 흐리게 처리하기 만하면됩니다. – mahboudz
콜린, 당신은이를 구축하는 코어 애니메이션 레이어를 사용하지 수 있을까? 그다지 권장하지 않습니다 ... 흐림 필터로 레이어를 만든 다음 다른 레이어를 위에 합성합니다. –
확인 했어야합니다. :-(CALayer 속성 필터에 대한 문서 발췌 "특별 고려 사항 CALayer 클래스가이 속성을 노출하는 동안 Core Image는 iPhone OS에서 사용할 수 없으며 현재이 속성에 사용할 수있는 필터는 정의되지 않았습니다." –
Michael의 의견에 감사드립니다. –