2012-08-02 52 views

回答

1

你應該能夠做到這一點,只需循環和繪製黑色和白色的圓圈,然後使用該圖像作爲您的圖像的掩碼。

這是我在谷歌發現了大約CoreGraphics中屏蔽,你或許可以適應您的需求的第一個鏈接:http://cocoawithlove.com/2009/09/creating-alpha-masks-from-text-on.html

我想像抽籤界的東西,你可以用自己的一些谷歌搜索弄清楚。

+0

感謝您的回覆。這是一個聰明的解決方案。現在我只需要「像素化」圖像......任何建議? – 2012-08-02 11:22:52

+0

我不知道是否有一個巧妙的CoreGraphics API可以爲您提供像素(可能有,而我無法找到它)。你可以做最簡單的實現,只是縮小圖像,然後縮小圖像。如果這對您的需求來說效率太低,那麼可以在這裏討論更高效的算法:http://stackoverflow.com/questions/1987054/whats-a-good-pixelation-algorithm-in-c-sharp-net – 2012-08-03 07:50:44

0

SHORT答案是:是的,但正是使用哪個框架,我不確定的時刻。 注意:喲剛剛問過是否有可能,我給你的問題,而不是如何去的污水

+0

你知道任何框架? – 2012-08-02 11:17:33

+2

不是一個非常有用的答案 – 2012-08-02 11:20:22

+0

@GordonDove他的問題sayas「有可能」不問「怎麼辦」。請閱讀http://stackoverflow.com/faq/http://stackoverflow.com/faq/ – ilhnctn 2012-08-02 12:05:26

3

是的,雖然Core Graphics可能不是在圖像上執行此類過濾的最佳方法。我的建議是使用OpenGL ES 2.0片段着色器。其實,我只是寫一個做到這一點:

Polka dot image conversion

這是我剛剛加入到我的開源GPUImage框架GPUImagePolkaDotFilter。使用它的最簡單的方法是抓住框架並將過濾器應用到任何你想要的(它足夠快以便在視頻上實時運行)。

如果你只是想用片段着色器,下面是我對這段代碼:

varying highp vec2 textureCoordinate; 

uniform sampler2D inputImageTexture; 

uniform highp float fractionalWidthOfPixel; 
uniform highp float aspectRatio; 
uniform highp float dotScaling; 

void main() 
{ 
    highp vec2 sampleDivisor = vec2(fractionalWidthOfPixel, fractionalWidthOfPixel/aspectRatio); 

    highp vec2 samplePos = textureCoordinate - mod(textureCoordinate, sampleDivisor) + 0.5 * sampleDivisor; 
    highp vec2 textureCoordinateToUse = vec2(textureCoordinate.x, (textureCoordinate.y * aspectRatio + 0.5 - 0.5 * aspectRatio)); 
    highp vec2 adjustedSamplePos = vec2(samplePos.x, (samplePos.y * aspectRatio + 0.5 - 0.5 * aspectRatio)); 
    highp float distanceFromSamplePoint = distance(adjustedSamplePos, textureCoordinateToUse); 
    lowp float checkForPresenceWithinDot = step(distanceFromSamplePoint, (fractionalWidthOfPixel * 0.5) * dotScaling); 

    gl_FragColor = vec4(texture2D(inputImageTexture, samplePos).rgb * checkForPresenceWithinDot, 1.0); 
} 
相關問題