0

こんにちは、カメラから選択された画像を含む2つの画像ビューと、「Made Hawk Nelson」のようなテキストのみの画像ビューがあります。2つの画像ビューの画像は以下のとおりです

ここに画像の説明を入力

xmlコードは以下です

  <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="7"
    android:scaleType="fitXY" >

    <ImageView
        android:id="@+id/imgSelectedPhoto"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY" />

    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/txt_made_hawk_nelson"
        android:layout_centerInParent="true" />

</RelativeLayout>

上は半分の画面のコードで、上の画像も半分の画面です

今、私はこの写真を保存したいのですが、誰かが私を助けてくれますか? CANVASは私を助けるかもしれませんが、私はそれを行う方法がわからないので、誰かが私を助けてください

4

4 に答える 4

1

あなたは正しい考えを持っています。キャンバスはそれを行う最も簡単な方法です。

ただし、最初に、これらの ImageView は画面上の表現にすぎず、これら 2 つの画像を重ね合わせたビットマップを作成しても、画面上の表現とはほとんど関係がないことを理解する必要があります。

画像のメモリ表現と同様に、Drawables (画面サイズに応じて事前にスケーリングされているため、ldpi、mdpi、hdpi、xhdpi フォルダーごとにデバイスによってサイズが異なります) と絶対表現であるビットマップがあります。 .

そして、今言ったことはすべてアプリケーションによって異なります。正確な解決策は提供しませんが、すべての概念を説明します。

例として、背景とテキストの両方を Bitmaps オブジェクトとして持っているとします。コードは次のようになります。

// Init our overlay bitmap
Bitmap bmp = backgroundBitmap.copy(Bitmap.Config.ARGB_8888, true);
// Init the canvas
Canvas canvas = new Canvas(bmp);
// Draw the text on top of the canvas
canvas.drawBitmap(textBitmap, 0, 0, null);

// now bmp have the two overlayed:

いくつかの計算を行い、メソッドの値 0、0 を使用しdrawBitmap()てテキストをキャンバスの中央に配置することができます (またそうする必要があります)。

または、ドローアブル ( getResources.getDrawable(R.drawable.bkgr); など) がある場合は、draw() メソッドを使用してキャンバスに描画し、 getIntrinsicHeight および getIntrinsicWidth を使用して、このメソッドを使用してビットマップを作成できます。

ハッピーコーディング!

于 2013-04-02T11:10:08.927 に答える
1

のようにレイアウトを変更します。

<Framelayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="7" >

<ImageView
    android:id="@+id/imgSelectedPhoto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="fitXY" />

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/txt_made_hawk_nelson"
    android:layout_centerInParent="true" />

setDrawingCacheEnabled(true); を設定します。それからビットマップを作成します。

Bitmap bitmap;
// frmCaptureThis is the root framelayout (this contains your imageviews)
View v1 = frmCaptureThis; 
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
saveImgToSDcard(bitmap); // function to saves the image to sd card
于 2013-04-02T11:10:11.707 に答える
1

これはあなたを助けるかもしれません.ここでは、必要な文字列で関数を変更し、背景drawable画像を渡し、フォントサイズ、テキストカラー、配置を調整し、Canvas1つのシングルBitmapを作成して確認する必要があります.

private Bitmap getThumb(String strangle, String strnote, int width, int height) {

  //Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.transperet_bg);
  Bitmap bmOverlay = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

  Canvas canvas = new Canvas(bmOverlay);
  Paint paint = new Paint();

  paint.setColor(Color.WHITE);
  paint.setTextSize(20);
  paint.setFlags(Paint.ANTI_ALIAS_FLAG);
  // if the background image is defined in main.xml, omit this line
  canvas.drawARGB(140, 0, 0, 0);
  //canvas.drawBitmap(mBitmap, 0, 0, null);
  // draw the text and the point
  paint.setTextAlign(Paint.Align.LEFT);

  canvas.drawText("Head Angel = " + strangle, 10, 20, paint);

  strnote = edtnote.getText().toString();
  if (TextUtils.isEmpty(strnote)) {
   strnote = "Note";
  }
  canvas.drawText(strnote, 10, 50, paint);
  paint.setTextAlign(Paint.Align.RIGHT);

  canvas.drawText("www.moovemtb.com", width-60, 50, paint);
  canvas.drawText("Head Angel App", width-60, 20, paint);

  canvas.drawPoint(30.0f, height/2, paint);
  return bmOverlay;
 }
于 2013-04-02T11:52:19.070 に答える
1

これを試してみてください、うまくいきます

BufferedImage img1 = ImageIO.read(new File(pathtoImage)); //first image
BufferedImage img2 = ImageIO.read(new File(pathtoOverlay)); //overlay text image
BufferedImage combinedImage = new BufferedImage(img1.getWidth(),img1.getHeight(),BufferedImage.TYPE_INT_RGB);

    Graphics g = combinedImage.getGraphics();

    g.drawImage(img1, 0, 0, null);
    g.drawImage(img2, 0, 0, null);
    ImageIO.write(combinedImage,"JPG",new File(pathToBeSaved,"combined.jpg");
于 2013-09-17T09:41:45.890 に答える