初心者ユーザーの質問:
数日間検索して実験しましたが、助けが必要です。私はおそらくこのトピックに関するすべての 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();
ビューの座標/寸法とビットマップの間に単純な数学的関係があることを願っています。
私は物事を進めるためのより良い方法にもオープンですが、プレビュー データ自体 (小さすぎる) を使用し、ビットマップを操作しようとしました (メモリ不足エラー)。
前もって感謝します。