フロントカメラのプレビューが左右反転しないようにしたい

1,714 views
Skip to first unread message

ebimasa

unread,
Jul 24, 2012, 2:34:27 AM7/24/12
to android-g...@googlegroups.com

いつも大変お世話になっています。
ebimasaと申します。

カメラのアプリを作成してみています。

作っているカメラアプリでは、
SurfaceViewを継承したクラスのdrawBitmapメソッドでプレビューを描画させています。

    public void drawBitmap(int[] img, float scaleX, float scaleY, int w, int h, Paint paint) {
        Canvas canvas = holder.lockCanvas();
        if (canvas != null) {
            canvas.scale(scaleX, scaleY);
            canvas.drawBitmap(img, 0, w, 0, 0, w, h, false, paint);
            holder.unlockCanvasAndPost(canvas);
        }
    }

今回、
カメラの切り替えを実装しようとしているのですが、フロントカメラのプレビューが左右反転してしまいます。
canvas.scale(scaleX, scaleY);

canvas.scale(-1.0f, 1.0f);
にすれば良いというようなブログの記事も見かけたのですが、
この箇所を変更すると何も描画されず黒い画面になってしまいました。
 
どなたか同じような現象を対応された方はいらっしゃいますでしょうか?
参考になるURLなどももしありましたら教えていただけると幸いです。
 
 
------
ちなみに
アプリを縦固定にしているため背面カメラのプレビューは90度回転させたかったのですが、
その処理は
    private void rotateOrigDat90(int[][] rotatedDat, int[] origDat, int biWidth, int biHeight) {
        int x, y, id;
        for (y = 0; y < biHeight; y++) {
            for (x = 0; x < biWidth; x++) {
                id = y * biWidth + x;
                rotatedDat[biWidth - 1 - x][y] = origDat[id];
            }
        }
    }
 
    private void setDat(int[][] rotatedDat, int[] dat, int biWidth, int biHeight) {
        int x, y, id;
        for (y = 0; y < biHeight; y++) {
            for (x = 0; x < biWidth; x++) {
                id = y * biWidth + x;
                dat[id] = rotatedDat[y][x];
            }
        }
    }
これらのメソッドを使用してデータを90度回転させました。
drawBitmapのcanvasの回転が今回と同じようにうまくできなかったので。

 

Message has been deleted

ebimasa

unread,
Jul 24, 2012, 6:38:02 AM7/24/12
to android-g...@googlegroups.com
再びすみません。
 
canvas.scale(-1.0f,1.0f,w/2,h/2);
 
で左右反転は回避できたのですが、
フロントカメラでtakePicture()するとフリーズしてしまい、
カメラのインスタンスが解放できてなくて、端末を再起動しないとカメラが使えなくなってしまっています。
 
対応方法をご存知の方いらっしゃいましたらご教示お願いしますっ><
Reply all
Reply to author
Forward
0 new messages