3

AndroidのBitMap画像で魚眼効果を実現しようとしています。役立つ既存のライブラリまたはアルゴリズムはありますか?

4

3 に答える 3

6

Android MediaEffectsAPIを使用することをお勧めします。効果をより細かく制御したい(または古いAndroidバージョンをターゲットにしたい)場合は、openglを直接使用して魚眼効果を写真に適用することもできます。このテーマに関するいくつかのチュートリアル:http://www.learnopengles.com/android-lesson-four-introducing-basic-texturing/。openglを学習すると、写真にあらゆる種類の効果を適用できるようになります。シェーダーコードは、インターネットで簡単に見つけることができます(例:https ://github.com/BradLarson/GPUImage/tree/master/framework/Source )

魚眼効果のシェーダーコードは次のとおりです。

private static final String FISHEYE_FRAGMENT_SHADER =
        "precision mediump float;\n" +
        "uniform sampler2D u_Texture;\n" +
        "uniform vec2 vScale;\n" +
        "const float alpha = float(4.0 * 2.0 + 0.75);\n" +
        "varying vec2 v_TexCoordinate;\n" +
        "void main() {\n" +
        "  float bound2 = 0.25 * (vScale.x * vScale.x + vScale.y * vScale.y);\n" + 
        "  float bound = sqrt(bound2);\n" +
        "  float radius = 1.15 * bound;\n" +
        "  float radius2 = radius * radius;\n" +
        "  float max_radian = 0.5 * 3.14159265 - atan(alpha / bound * sqrt(radius2 - bound2));\n" + 
        "  float factor = bound / max_radian;\n" + 
        "  float m_pi_2 = 1.570963;\n" +
        "  vec2 coord = v_TexCoordinate - vec2(0.5, 0.5);\n" +
        "  float dist = length(coord * vScale);\n" +
        "  float radian = m_pi_2 - atan(alpha * sqrt(radius2 - dist * dist), dist);\n" +
        "  float scalar = radian * factor / dist;\n" +
        "  vec2 new_coord = coord * scalar + vec2(0.5, 0.5);\n" +
        "  gl_FragColor = texture2D(u_Texture, new_coord);\n" +
        "}\n";
于 2014-05-10T08:20:48.897 に答える
2

Android用のOpenCVをご覧ください:

http://opencv.org/platforms/android.html

そしてこの答え:

openCVで魚眼レンズ効果をシミュレートする方法は?

于 2012-09-20T15:38:56.750 に答える
1

おそらく、より簡単な解決策は、Android MediaEffectsAPIを使用することです。ただし、API14以降からのみ利用できます。

于 2012-11-21T05:10:55.543 に答える