截图代码如下:                        
Rect rt = new Rect(0,0, mSurfaceWidth, mSurfaceHeight);
Log.d("captureJPG Rect width : " + rt.width() + " height : " + rt.height());
can = mSurfaceHolder.getSurface().lockCanvas(rt);
if(can == null)
{
    Log.e("LocalCanvas failed");
    return null;
}
bmp = Bitmap.createBitmap(mSurfaceWidth, mSurfaceHeight, Bitmap.Config.ARGB_8888);
can.drawBitmap(bmp, 0, 0, null);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);
mSurfaceHolder.getSurface().unlockCanvas(can);执行结果为lockCanvas抛出OutOfResourcesException异常。
其中mSurfaceWidth,mSurfaceHeight分别是视频的宽和高,320*240.
视频什么的都是正常播放的。
mSurfaceHolder为之前surfaceCreated的时候保存下来的。
各位帮我看一下,问题出在哪?

解决方案 »

  1.   

    mSurfaceHolder.getSurface().lockCanvas(rt);失败了,说明没有把SURFACE LOck住
    lock之前可能还要调用mSurfaceHolder的其他相关函数
      

  2.   

    我调用mSurfaceHolder.getSurface().isValid()返回结果为true.
    我把详细的exception打印出来,各位帮我看一下,先谢谢了。
    01-06 01:24:55.235: ERROR/Surface(14198): Surface (identity=455) requestBuffer(0, 00000033) returneda buffer with a null handle
    01-06 01:24:55.235: ERROR/Surface(14198): getBufferLocked(0, 00000033) failed (Out of memory)
    01-06 01:24:55.235: ERROR/Surface(14198): dequeueBuffer failed (Out of memory)
    01-06 01:24:55.235: WARN/System.err(14198): android.view.Surface$OutOfResourcesException
    01-06 01:24:55.235: WARN/System.err(14198):     at android.view.Surface.lockCanvasNative(Native Method)
    01-06 01:24:55.235: WARN/System.err(14198):     at android.view.Surface.lockCanvas(Surface.java:314)