3

初心者ユーザーの質問:

数日間検索して実験しましたが、助けが必要です。私はおそらくこのトピックに関するすべての SO 投稿を読んだことがありますが、まだ理解できません。

カメラ プレビュー イメージの特定の領域をトリミングしようとしています。問題は、青いボックスが上 = 150、左 = 38、高さ = 292、幅 = 600 のレイアウトで定義されていることです。画像の高さ = 2448、幅 = 3264 です。

大きなボックスはカメラのプレビュー画面で、小さなボックスはトリミングしたい部分です (明らかに写真を投稿する機能はまだありません)。

------------------------------
| | | |
| | | |
| | | |
| | --------- |
| | | | | | | |
| | --------- |
| | | |
------------------------------

ボックス内の部分だけが残るように画像をトリミングするにはどうすればよいですか? 別のアクティビティで表示するので、その部分は心配ありません。

複雑なことに、ボックスのサイズと画像のサイズは携帯電話によって異なり、API 8 (バージョン 2.2、Froyo) を使用する必要があります。

また、画像をファイルに保存しないことをお勧めします。これは、画像を暗号化する必要があるためです (画像は預金用の小切手の画像になります)。

次のコード スニペットのように Camera.takePicture() と jpegCallback を使用しています (initialBitmap は上記の「大きなボックス」、rl は「小さなボックス」になります)。

    PictureCallback jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        if ( data != null && data.length > 0 ) {
            Bitmap initialBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

            int bitmapHeight = initialBitmap.getHeight();
            int bitmapWidth = initialBitmap.getWidth();

            // get the "picture" frame
            RelativeLayout rl = (RelativeLayout) findViewById( R.id.clear_layout );

            int frameX = rl.getLeft();
            int frameY = rl.getTop();
            int frameHeight = rl.getHeight();

ビューの座標/寸法とビットマップの間に単純な数学的関係があることを願っています。

私は物事を進めるためのより良い方法にもオープンですが、プレビュー データ自体 (小さすぎる) を使用し、ビットマップを操作しようとしました (メモリ不足エラー)。

前もって感謝します。

4

1 に答える 1

1

誰かが気になる場合に備えて、私はこの質問に対する答えを見つけられませんでした. 私は別の方法で問題を解決することになりました。プレビュー領域全体を使用し、「写真を撮る」ボタンを邪魔にならないように透明にしました。トリミングもしていませんが、画像のサイズはトリミングしたものに近いです。

昨年私が学んだすべてのことから、プレビュー サイズと結果の jpg ファイル サイズの間に関係があるとは思いません。この関係は、電話のカメラによって異なるようです。

誰かが関係を見つけた場合、私はまだそれについて学ぶことを嬉しく思います.

于 2014-02-27T20:13:28.413 に答える