目前我正在製作一個照片編輯器應用程序。我有活動,您可以添加文字到圖像。我需要用位圖中的文字保存圖像。我已經嘗試保存繪圖緩存,但問題是它以低質量保存圖像。原始圖像4032 * 3024當我保存它使用的圖像尺寸是1517 * 1137.我試圖縮放到原始大小的位圖,但質量太差。現在我試圖在畫布上繪製原始位圖,然後在與View上相同的位置繪製文本。 float x = editText.getLeft() * (scale); float y = editText.getTop() * (scale); canvas.drawText(editText.getText().toString(), x, y, tp);
但由於某些原因文本不在同一個地方。我試着用密度來獲得座標,但它也不起作用。使用textview保存Imageview
<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>
這裏是Java代碼:
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; }
好的,我試過了。現在X-asis在正確的位置,但Y-asis比它應該高一點?也許我錯過了什麼? – ipauler
您是否嘗試過使用view.getLocationOnScreen()或view.getLocationInWindow()。另外,嘗試在這個線程的其他方法https://stackoverflow.com/questions/17623829/get-position-of-view-with-respect-to-top-most-parent-in-android?rq=1 –
沒有它僅當圖像處於縱向尺寸時,高度大於寬度時,橫向時位於錯誤位置時才起作用。 – ipauler