私のアプリケーションでは、ユーザーが内に含まれる画像のコンテンツを選択できるようにしたいと思いますImageView
。
コンテンツを選択するために、ImageView
クラスをサブクラス化して実装OnTouchListener
し、ユーザーが決定した境界線を持つ長方形をその上に描画します。
描画結果の例を次に示します(どのように機能するかを知るために、デスクトップ上でマウスをクリックしてマウスをドラッグしたときのように考えることができます)。
次に、画像のどのピクセルBitmap
が選択した部分に対応するかを判断する必要があります。長方形に属する点がどれであるかを判断するのは簡単ですが、元の画像とはアスペクト比が異なるImageView
ため、対応するピクセルを取得する方法がわかりません。ImageView
私は特にここで説明されているアプローチに従いましたが、ここでも完全には満足していません。私の意見では、ピクセルと上のポイントの間の対応は1対1でありImageView
、元の画像のすべての対応するピクセルが選択されたものに与えられないためです。範囲。
hoveredRect
その内側のポイントで長方形を呼び出すと、ImageView
次のようになります。
class Point {
float x, y;
@Override
public String toString() {
return x + ", " + y;
}
}
Vector<Point> pointsInRect = new Vector<Point>();
for( int x = hoveredRect.left; x <= hoveredRect.right; x++ ){
for( int y = hoveredRect.top; y <= hoveredRect.bottom; y++ ){
Point pointInRect = new Point();
pointInRect.x = x;
pointInRect.y = y;
pointsInRect.add(pointInRect);
}
}
Vector<Pixels> pixelsInImage
画像の対応するピクセルを含むを取得するにはどうすればよいBitmap
ですか?
追加された説明
私の問題の文脈をもう少しよく説明します:
選択した部分で画像処理を行う必要があり、長方形のすべてのピクセルが確実に処理されるようにしたいです。
画像処理はサーバー上で実行されますが、処理するピクセルを正確に知る必要があります。サーバーは実際のサイズの画像で動作します。Androidアプリは、ピクセル座標を含むベクトルを渡すことで、サーバーに処理するピクセルを指示するだけです。
そして、なぜ私は上記のリンクで提案された解決策が好きではないのですか?
与えられた答えは、1対1の方法で座標を変換します。画面上の特定のサイズのたとえば50ポイントの領域は、実際の画像の同じピクセル数の領域に対応できないため、このアプローチは明らかに私のタスクには有効ではありません
ImageView
が、異なるアスペクト比を考慮する必要があります。
ImageView
例として、これは、画像がアプリに表示されているものよりも小さい場合に選択する必要がある領域です。