如何捕获surfaceview背景的屏幕截图 [英] How to capture screenshot of surfaceview with background
本文介绍了如何捕获surfaceview背景的屏幕截图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的应用程序,我想捕捉屏幕,这是surfaceview,但我不是在其上绘制background.how以保存随着background.please绘制的屏幕帮助我如何解决这个问题,能够捕捉画面。
查看内容= findViewById(R.id.relative21);
content.setDrawingCacheEnabled(真正的);
SurfaceHolder sfhTrack = drawingSurface.getHolder();
sfhTrack.setFormat(PixelFormat.TRANSPARENT);
私人无效getScreen(){
// TODO自动生成方法存根
查看内容= findViewById(R.id.relative21);
点阵位图= content.getDrawingCache();
文件MYDIR =新的文件(/ SD卡/ saved_images);
myDir.mkdirs();
随机数发生器=新的随机();
INT N = 10000;
N = generator.nextInt(N);
字符串FNAME =图像 - + N +巴。
档案文件=新的文件(MYDIR,FNAME);
尝试
{
FileOutputStream中的ostream =新的FileOutputStream(文件);
bitmap.com preSS(比较pressFormat.PNG,100,ostream的);
ostream.close();
}
赶上(例外五)
{
e.printStackTrace();
}
}
我试图codeI时能够节省背景上面,但我不能够保存其绘制。
解决方案
公共静态位图覆盖(BMP1位图,位图BMP2){
位图bmOverlay = Bitmap.createBitmap(bmp1.getWidth(),bmp1.getHeight(),bmp1.getConfig());
帆布油画=新的Canvas(bmOverlay);
canvas.drawBitmap(BMP1,0,0,NULL);
canvas.drawBitmap(BMP2,0,0,NULL);
Log.i(bmOverlay ......。,,+ bmOverlay);
BMP3 = bmOverlay;
返回bmOverlay;
}
私人无效getScreen(){
Toast.makeText(BookType1.this,拯救,Toast.LENGTH_SHORT).show();
文件MYDIR =新的文件(/ SD卡/ saved_images);
myDir.mkdirs();
随机数发生器=新的随机();
INT N = 10000;
N = generator.nextInt(N);
字符串FNAME =图像 - + N +巴。
档案文件=新的文件(MYDIR,FNAME);
尝试
{
FileOutputStream中的ostream =新的FileOutputStream(文件);
bmp3.com preSS(比较pressFormat.PNG,100,ostream的);
ostream.close();
}
赶上(例外五)
{
e.printStackTrace();
}
}
通过重叠两个位图我在一个位图解决了这个问题,我拍摄的背景和第二位图我抓住表面观和我重叠无论是在这方面,我得到了解决办法。
in my application i want to capture screen which is with surfaceview but i am not able capture screen on which is drawn with background.how to save the screen with drawn along with background.please help me how to solve this issue.
View content = findViewById(R.id.relative21);
content.setDrawingCacheEnabled(true);
SurfaceHolder sfhTrack = drawingSurface.getHolder();
sfhTrack.setFormat(PixelFormat.TRANSPARENT);
private void getScreen() {
// TODO Auto-generated method stub
View content = findViewById(R.id.relative21);
Bitmap bitmap = content.getDrawingCache();
File myDir=new File("/sdcard/saved_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-"+ n +".png";
File file = new File (myDir, fname);
try
{
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
i tried above code i am able to save background but i am not able save which is drawn.
解决方案
public static Bitmap overlay(Bitmap bmp1,Bitmap bmp2) {
Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1, 0,0, null);
canvas.drawBitmap(bmp2, 0, 0, null);
Log.i("bmOverlay.......",""+bmOverlay);
bmp3=bmOverlay;
return bmOverlay;
}
private void getScreen() {
Toast.makeText(BookType1.this, "saved", Toast.LENGTH_SHORT).show();
File myDir=new File("/sdcard/saved_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-"+ n +".png";
File file = new File (myDir, fname);
try
{
FileOutputStream ostream = new FileOutputStream(file);
bmp3.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
By overlapping two bitmaps i solved this issue in one bitmap i captured background and in second bitmap i captured surface view and i overlapped both in this i got solution.
这篇关于如何捕获surfaceview背景的屏幕截图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文