Momentan mache ich eine Fotoeditor-App. Ich habe Aktivität, wo Sie dem Bild einen Text hinzufügen können. Ich muss Bild mit Text in Bitmap speichern. Ich habe bereits versucht, Zeichnungscache zu speichern, aber das Problem ist, dass es Bild in schlechter Qualität speichert. Original-Bild 4032 * 3024, wenn ich es speichern verwendet Größe von Imageview, die 1517 * 1137 sind. Ich habe versucht, Bitmap bis zur Originalgröße zu skalieren, aber die Qualität ist zu schlecht. Jetzt versuche ich, Original-Bitmap auf Leinwand zu zeichnen und dann Text an der gleichen Stelle zu zeichnen wie in View. float x = editText.getLeft() * (scale); float y = editText.getTop() * (scale); canvas.drawText(editText.getText().toString(), x, y, tp);
Aber aus irgendeinem Grund ist Text nicht an der gleichen Stelle. Ich habe versucht, Dichte zu verwenden, um Koordinaten zu erhalten, aber es funktioniert auch nicht.Bildansicht speichern Mit Textansicht zu Bitmap
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/add_text_color_picker_relative_layout"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true">
<RelativeLayout
android:id="@+id/edit_photo_add_text_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<ImageView
android:id="@+id/edit_photo_add_text_main_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
<EditText
android:id="@+id/edit_photo_add_text_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/rect_edittext"
android:hint="Поле для текста"
android:inputType="textNoSuggestions"
android:padding="4dp"
android:textSize="14dp" />
</RelativeLayout>
</RelativeLayout>
Und hier ist Java-Code:
public Bitmap createImage(View view, int imageViewId, int textViewId, Context context){
ImageView imageView = (ImageView) view.findViewById(imageViewId);
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
float bitmapRatio = (bitmap.getWidth())/bitmap.getHeight();
float imageViewRatio = (imageView.getWidth())/imageView.getHeight();
float scaleW = bitmap.getWidth()/imageView.getWidth();
float scaleH = bitmap.getHeight()/imageView.getHeight();
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
bitmap = bitmap.copy(bitmapConfig, true);
EditText editText = (EditText) view.findViewById(textViewId);
float density = context.getResources().getDisplayMetrics().density;
Canvas canvas = new Canvas(bitmap);
canvas.setBitmap(bitmap);
TextPaint tp = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
tp.setColor(Color.WHITE);
tp.setTextSize(editText.getTextSize()*density);
Resources resources = context.getResources();
float scale = resources.getDisplayMetrics().density;
int[] xy = {0, 0};
editText.getLocationOnScreen(xy);
float x = xy[0] * (scaleW);
float y = xy[1] * (scaleH);
canvas.drawText(editText.getText().toString(), x, y, tp);
canvas.save();
canvas.restore();
return bitmap; }
Ok, ich habe es versucht. Jetzt auf der X-asis ist es an der richtigen Stelle, aber Y-asis ein wenig groß höher als es sein sollte? Vielleicht fehlt mir etwas? – ipauler
Haben Sie mit view.getLocationOnScreen() oder view.getLocationInWindow() versucht. Versuchen Sie auch andere Methode in diesem Thread https://stackoverflow.com/questions/17623829/get-position-of-view-with-respect-to-top-most-parent-in-android?rq=1 –
Nein, es funktioniert nur, wenn das Bild im Hochformat ist, wenn die Höhe größer als die Breite ist, in der Landschaft ist es an der falschen Stelle. – ipauler