将 EditText 和 ImageView 合并为单个图像(位图)?
Merge EditText and ImageView as a single Image (Bitmap)?
我有一个 ImageView
和一个 EditText
放在 ImageView
。我希望 EditText
上的书面文本作为单个图像(位图)成为 ImageView
的一部分,因为它正在写入时正在显示。我试过使用 canvas.drawText(...)
但在编写时无法获得准确的外观。
更新::
已解决...下面的答案
一旦我做了类似的东西,你正在尝试。我使用 Textview 来做到这一点。我把它的背景资源和文字分开设置了。
//for image
int pos = imageList[mPosition];//integer array keeps r.mipmap.x
tvShare.setBackgroundResource(pos);
//for text you can change settings
tvShare.setTypeface(null, Typeface.NORMAL);
tvShare.setGravity(Gravity.CENTER);
//how I converted it to bitmap
Bitmap image;
image = loadBitmapFromView(tvShare,getApplicationContext());
这是我解决这个问题的方法。如果我想要的图像是这样的:
那么解决方案将是:
/**
* Merging Two Images into One Image.
* @param baseImage Bitmap as Lower Image , Image to be appeared underneath.
* @param headerImage Bitmap as Upper Image, Image to be appeared upon the lower image.
* @return finalImage Bitmap as bytes having both images merged.
*/
public static byte[] mergeImages(Bitmap baseImage, Bitmap headerImage, Bitmap footerImage ) {
Bitmap finalImage = Bitmap.createBitmap(baseImage.getWidth(), baseImage.getHeight(), baseImage.getConfig());
Canvas canvas = new Canvas(finalImage);
canvas.drawBitmap(baseImage, new Matrix(), null);
if(headerImage != null){
canvas.drawBitmap(headerImage, new Matrix(), null);
}
if(footerImage != null){
Matrix matrix = new Matrix();
matrix.setTranslate(0, baseImage.getHeight() - footerImage.getHeight());
canvas.drawBitmap(footerImage, matrix, null);
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
finalImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
return bytes;
}
我有一个 ImageView
和一个 EditText
放在 ImageView
。我希望 EditText
上的书面文本作为单个图像(位图)成为 ImageView
的一部分,因为它正在写入时正在显示。我试过使用 canvas.drawText(...)
但在编写时无法获得准确的外观。
更新:: 已解决...下面的答案
一旦我做了类似的东西,你正在尝试。我使用 Textview 来做到这一点。我把它的背景资源和文字分开设置了。
//for image
int pos = imageList[mPosition];//integer array keeps r.mipmap.x
tvShare.setBackgroundResource(pos);
//for text you can change settings
tvShare.setTypeface(null, Typeface.NORMAL);
tvShare.setGravity(Gravity.CENTER);
//how I converted it to bitmap
Bitmap image;
image = loadBitmapFromView(tvShare,getApplicationContext());
这是我解决这个问题的方法。如果我想要的图像是这样的:
那么解决方案将是:
/**
* Merging Two Images into One Image.
* @param baseImage Bitmap as Lower Image , Image to be appeared underneath.
* @param headerImage Bitmap as Upper Image, Image to be appeared upon the lower image.
* @return finalImage Bitmap as bytes having both images merged.
*/
public static byte[] mergeImages(Bitmap baseImage, Bitmap headerImage, Bitmap footerImage ) {
Bitmap finalImage = Bitmap.createBitmap(baseImage.getWidth(), baseImage.getHeight(), baseImage.getConfig());
Canvas canvas = new Canvas(finalImage);
canvas.drawBitmap(baseImage, new Matrix(), null);
if(headerImage != null){
canvas.drawBitmap(headerImage, new Matrix(), null);
}
if(footerImage != null){
Matrix matrix = new Matrix();
matrix.setTranslate(0, baseImage.getHeight() - footerImage.getHeight());
canvas.drawBitmap(footerImage, matrix, null);
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
finalImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
return bytes;
}