2013-04-02 180 views
0

你好我有一個的兩個圖像視圖中的一個與圖象被從照相機選擇和另一個ImageView的是僅包含「製造霍克納爾遜」兩個imageview的的圖像TEXT低於合併兩個圖像,其是覆蓋

enter image description here

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> 

上面是半屏代碼及以上形象也半屏

現在我想牛逼o保存此圖片任何機構都可以幫助我如何做到這一點?可能是CANVAS將幫助我,但我不知道該怎麼做,所以請任何機構可以幫助我

+0

你需要在這裏查看我的回答,HTTP://計算器。com/questions/6159186 /我怎麼寫文字在圖片在Android和保存它 – MKJParekh

+0

亞MKJParekh首先謝謝,但MKJParekh它不會看起來像上面的圖像無我想將文字圖像插入到fitXY中的中心和背景圖像中 –

+0

如果您將EditText的(或帶有文本圖像的imageview)重心設置爲居中,那麼結果圖像將與上面的圖像相同 – MKJParekh

回答

1

你有正確的想法。畫布將是最簡單的方式。

但是你必須首先理解那些ImageViews只是在屏幕上的表示,而用這兩個圖片創建一個Bitmap與它的屏幕顯示沒有多大關係。

正如在圖像的內存表示中,您將擁有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() method畫到畫布上,並使用getIntrinsicHeight和getIntrinsicWidth創建使用this method

位圖

快樂編碼!

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(真);並從中創建位圖。

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 
+0

我按照你的建議做了,但它只顯示白色圖片 –

+0

請你解釋一下。白色圖像是什麼意思? –

+0

請確保您捕獲的是根framlayout,並且這兩個圖像位於framlayout內 –

1

這可能幫助您,這裏需要改變的功能與必字符串,並通過您的背景drawable圖片, 並調整字體大小,文字顏色和對齊方式使用Canvas,並創建一個單一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; 
} 
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");