截图 相机视图+布局视图 android 增强现实
Posted
技术标签:
【中文标题】截图 相机视图+布局视图 android 增强现实【英文标题】:taking screenshot camera view+layout view android augmented reality 【发布时间】:2012-11-13 22:50:35 【问题描述】:我尝试从帧缓冲区截屏,它适用于我的布局视图 我使用了here的以下代码:
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_APPEND;
// create bitmap screen capture
Bitmap bitmap;
View v1 = mCurrentUrlMask.getRootView();
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
OutputStream fout = null;
imageFile = new File(mPath);
try
fout = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
fout.flush();
fout.close();
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
但我想用相机视图捕捉布局视图,因为我也在布局视图或透明网页的背景中使用相机视图。 一种解决方法是分别拍摄相机图像和布局视图并将它们放在一起并保存新的位图。
谁能建议我任何适当的解决方案? 提前致谢
【问题讨论】:
相机打开时如何拍照?实际上我需要在屏幕中打开相机时进行屏幕截图/ @mrYogi:你有什么解决办法吗? 【参考方案1】:为了将两个图像放在一起,您可能希望按照此代码 100% 工作以将两个图像叠加在一起
Bitmap border = BitmapFactory.decodeResource(getResources(), R.drawable.vignette2);
int width = bmp.getWidth();
int height = bmp.getHeight();
change = Bitmap.createScaledBitmap(change, width, height, false); // change is Bitmap
Canvas canvas = new Canvas(change);
Bitmap scaledBorder = Bitmap.createScaledBitmap(border,width,height, false);
canvas.drawBitmap(scaledBorder, 0, 0,null);
//canvas.drawBitmap(k, 0, 0, null);
view.setImageBitmap(change); // view is the imageView
现在部分保存视图,简单的方法是
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
save = view.getDrawingCache(); // save is a Bitmap
然后:
final FileOutputStream out = new FileOutputStream(file);
save.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
Toast.makeText(getApplication(), "Image Saved",
Toast.LENGTH_SHORT).show();
这将为您保存 imageview 的视图,或者如果它的 Layout 则只需设置您的布局并为其命名,然后将其替换为 view
并且在你检查保存是否成功后请不要忘记设置
view.setDrawingCacheEnabled(false);
【讨论】:
感谢您的快速回复,但是有什么方法可以在后台运行相机的情况下捕获屏幕截图? 啊刚刚想起一件事。只需将您的保存方法传递给受保护的 void onPause() super.onPause();保存(); 现在,当您的应用在后台时,它将继续执行保存方法! 你误会我的意思了,“在后台”是指背景中的相机视图和透明视图,在这种情况下截屏。 在这种情况下我猜你需要 FrameLayout 来完成这个。只需将两个布局叠加在一起,如果您有单独的布局,那么就在您的 mainlayout 中。添加 framelayout 由我无法将代码发布为评论,所以你去吧 您是否可以在您的 onActivtity 上传递该特定方法,或者在您发送意图后传递它,或其自定义相机然后您可以控制当您单击相机按钮时只需添加一个方法来捕获视图。这是我保存视图的方法。
void Save()
if (null != view.getDrawable())
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
save = view.getDrawingCache();
final File myDir = new File(folder);
myDir.mkdirs();
final Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
final String fname = "StyleMe-" + n + ".png";
final File file = new File(myDir, fname);
if (file.exists())
file.delete();
try
final FileOutputStream out = new FileOutputStream(file);
save.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
Toast.makeText(getApplication(), "Image Saved",
Toast.LENGTH_SHORT).show();
catch (final Exception e)
Toast.makeText(getApplication(),
"Something Went Wrong check if you have Enough Memory",
Toast.LENGTH_LONG).show();
else
final Toast tst = Toast.makeText(getApplication(),
"Please Select An Image First", Toast.LENGTH_LONG);
tst.setGravity(Gravity.CENTER, 0, 0);
tst.show();
view.setDrawingCacheEnabled(false);
为了让您不断保存视图,然后只需添加循环。当您单击循环开始的相机按钮时!在我的保存方法中,不要担心覆盖名称:)。它将随机生成每个图像的名称!
【讨论】:
以上是关于截图 相机视图+布局视图 android 增强现实的主要内容,如果未能解决你的问题,请参考以下文章