Ich konvertiere jeden von der Kamera abgerufenen Frame in eine Bitmap und zeige sie auf einem ImageView an. Was ich haben will, ist die genaue Größe der Bitmap, die auf dem Bild angezeigt wird, NICHT die Größe des ImageView selbst. in dem unten angegebenen Code ist meine Versuche und wie ich versuchte, die Breite und die Höhe der Bitmap zu bekommen. Aber der Code darunter geschrieben scheint es gibt nur die Dimensionen des Imageview selbst, weil ich den Code zweimal getestet wie folgt:Wie bekomme ich die Größe von Bitmap, das ein imageView belegt?
Erster Test:
stelle ich die layout_weight Attribut auf 0,3 wie folgt
<RelativeLayout
android:id="@+id/mainActivity_imageView_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight=".3"
android:layout_below="@id/mainActivity_cameraPreview_container">
<ImageView
android:id="@+id/mainActivity_ivEdges"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
und zur Laufzeit empfangen i die folgende Ausgabe:
11-14 14:16:16.782 585-681/com.example.textureview_03 D/PreviewSurface: before bitmap.getWidth(): 960
11-14 14:16:16.782 585-681/com.example.textureview_03 D/PreviewSurface: before bitmap.getHeight(): 720
11-14 14:16:16.907 585-585/com.example.textureview_03 D/PreviewSurface: after resizedBitmap.getWidth(): 720
11-14 14:16:16.907 585-585/com.example.textureview_03 D/PreviewSurface: after resizedBitmap.getHeight(): 960
Bild wird angezeigt
Zweiten Test:
i das layout_weight Attribut auf 0,6 eingestellt, wie
<RelativeLayout
android:id="@+id/mainActivity_imageView_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight=".6"
android:layout_below="@id/mainActivity_cameraPreview_container">
<ImageView
android:id="@+id/mainActivity_ivEdges"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
und zur Laufzeit folgt empfangen i die folgende Ausgabe:
11-14 14:17:33.577 2241-2339/com.example.textureview_03 D/PreviewSurface: before bitmap.getWidth(): 960
11-14 14:17:33.577 2241-2339/com.example.textureview_03 D/PreviewSurface: before bitmap.getHeight(): 720
11-14 14:17:33.667 2241-2241/com.example.textureview_03 D/PreviewSurface: after resizedBitmap.getWidth(): 720
11-14 14:17:33.667 2241-2241/com.example.textureview_03 D/PreviewSurface: after resizedBitmap.getHeight(): 960
Bild
i geschlossen Daher angezeigt wird, dass die Größe i in dem logcat Ausgang immer bin, ist nicht die genaue Größe der Bitmap wird auf dem Imageview angezeigt, aber es könnte die Größe des ImageView selbst
Bitte lassen Sie mich wissen, wie Sie die genaue Größe der Bitmap erhalten, die auf dem ImageView angezeigt wird?
Code:
@Override
protected Void doInBackground(Void... params) {
Camera.Parameters parameters = mCamera.getParameters();
int format = parameters.getPreviewFormat();
//YUV formats require more conversion
if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16) {
int w = parameters.getPreviewSize().width;
int h = parameters.getPreviewSize().height;
// Get the YuV image
YuvImage yuv_image = new YuvImage(mData, format, w, h, null);
Rect rect = new Rect(0, 0, w, h);
ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
yuv_image.compressToJpeg(rect, 100, output_stream);
byte[] byt = output_stream.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(byt, 0, byt.length);
Log.d(TAG, "before bitmap.getWidth(): " + bitmap.getWidth());
Log.d(TAG, "before bitmap.getHeight(): " + bitmap.getHeight());
//required to rotate the bitmap, because it is initially lopsided
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
publishProgress(resizedBitmap);
}
@Override
protected void onProgressUpdate(Bitmap... values) {
super.onProgressUpdate(values);
Bitmap resizedBitmap = values[0];
Log.d(TAG, "after resizedBitmap.getWidth(): " + resizedBitmap.getWidth());
Log.d(TAG, "after resizedBitmap.getHeight(): " + resizedBitmap.getHeight());
mIVEdges.setImageBitmap(resizedBitmap);
}
Verwendung 'layout_width' &' 'layout_weight' wrap_content' und versuchen –
@kirankumar ich habe versucht it..i bin die gleiche Größe bekommen egal was das Layoutgewicht ist !!! – user2121