2014-10-17 47 views
2

我试图用相机拍照,修改拍摄的图像,然后在用户点击接受后在相机中将修改的图像显示给用户。这里是我的代码,上面那里我做了创建该错误代码更改评论:在Android中使用相机拍摄照片时出现致命的信号11和奇怪的错误信息

private class TakePictureThread extends Thread { 
    private Camera.PictureCallback pPictureCallback; 

    @Override 
    public void run() { 

     pPictureCallback = new PictureCallback() { 

      @Override 
      public void onPictureTaken(byte[] data, Camera camera) { 

       CameraInfo info = new CameraInfo(); 
       Camera.getCameraInfo(0, info); 

       SurfaceView surfaceView = mCameraCaptureView.getSurfaceView(); 

       // TODO: scale this such that we don't need to scale the cropped image 
       Bitmap unrotatedRawImage = 
         ImageUtils.decodeSampledBitmap(data, 
           surfaceView.getWidth(), 
           surfaceView.getHeight(), Bitmap.Config.RGB_565); 
       Bitmap rawImage = 
         ImageHelper.rotate(unrotatedRawImage, info.orientation); 
       unrotatedRawImage.recycle(); 

       mCroppedImage = cropRawCapturedImage(rawImage); 
       rawImage.recycle(); 

       mCroppedImage = Bitmap.createScaledBitmap(
         mCroppedImage, 
         ImageSize.CARD.getPixelWidth(), 
         ImageSize.CARD.getPixelHeight(), 
         false); 

       mImagePreview.setImageBitmap(mCroppedImage); 

       if (useBlurringAndGradient()) { 
        //new code 
        Bitmap blurredBitmap = ImageUtils.blurImage(mCroppedImage); 
        mImagePreview.setImageBitmap(blurredBitmap); 
       } 

       handlePhotoTaken(); 
      } 
     }; 

     mCameraCaptureView.getCamera().takePicture(null, null, pPictureCallback); 
    } 
} 

而且blurImage方法:

/** 
* Performs the max blur possible 20 times on the bitmap provided. 
*/ 
static private Bitmap blurCardImage(Bitmap bitmap) { 
    RenderScript rs = RenderScript.create(MainApp.getInstance()); 

    Bitmap blurredBitmap = 
      Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); 

    for (int i = 0; i < 20; i++) { 
     Allocation allIn = Allocation.createFromBitmap(rs, bitmap); 
     Allocation allOut = Allocation.createFromBitmap(rs, blurredBitmap); 

     ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); 
     blurScript.setRadius(25.f); 

     blurScript.setInput(allIn); 
     blurScript.forEach(allOut); 

     allOut.copyTo(blurredBitmap); 

     bitmap = blurredBitmap; 
    } 

    rs.destroy(); 

    return bitmap; 
} 

这里是日志看起来像发生这种情况时:

10-20 10:20:15.588: E/Camera(18230): Unknown message type 62273 
10-20 10:20:15.588: E/Camera(18230): Unknown message type 62274 
10-20 10:20:21.468: D/ProgressBar(18230): updateDrawableBounds: left = 0 
10-20 10:20:21.468: D/ProgressBar(18230): updateDrawableBounds: top = 0 
10-20 10:20:21.468: D/ProgressBar(18230): updateDrawableBounds: right = 228 
10-20 10:20:21.468: D/ProgressBar(18230): updateDrawableBounds: bottom = 228 
10-20 10:20:22.408: D/dalvikvm(18230): GC_FOR_ALLOC freed 11182K, 19% free 55902K/68748K, paused 47ms, total 47ms 
10-20 10:20:22.418: V/RenderScript(18230): 0x7b761008 Launching thread(s), CPUs 4 
10-20 10:20:22.428: V/RenderScript(18230): User-backed allocation failed stride requirement, falling back to separate allocation 
10-20 10:20:22.498: A/libc(18230): Fatal signal 11 (SIGSEGV) at 0x7d9d7000 (code=1), thread 18869 (.myapp) 
10-20 10:20:22.498: A/libc(18230): Fatal signal 11 (SIGSEGV) at 0x7d9d7000 (code=1), thread 18867 (.myapp) 
10-20 10:20:22.498: A/libc(18230): Fatal signal 11 (SIGSEGV) at 0x7d9d7000 (code=1), thread 18868 (.myapp) 
10-20 10:20:22.498: A/libc(18230): Fatal signal 11 (SIGSEGV) at 0x7d9d7000 (code=1), thread 18870 (.myapp) 
+0

启用详细日志级别 – ben75 2014-10-17 21:21:07

+0

@ ben75我将日志更新为详细级别。 – mpellegr 2014-10-20 14:22:31

+0

为什么这会降低投票率?如有必要,我可以提供更多细节。 – mpellegr 2014-10-23 19:49:34

回答

0

原来的答案是没有产生正确的位图输出我期待所以我改变了这部分:

if (useBlurringAndGradient()) { 
    Bitmap blurredBitmap = ImageUtils.blurImage(mCroppedImage); 
    mImagePreview.setImageBitmap(blurredBitmap); 
} 

这样:

if (useBlurringAndGradient()) { 
    mImagePreview.buildDrawingCache(); 
    Bitmap bitmap = mImagePreview.getDrawingCache(); 
    Bitmap blurredBitmap = ImageUtils.blurImage(bitmap); 
    mImagePreview.setImageBitmap(blurredBitmap); 
} 

这也固定崩溃我正在和我再也看不到在日志的警告。有谁知道这个问题解决了我的问题的原因?

相关问题