いつも大変お世話になっています。
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の回転が今回と同じようにうまくできなかったので。