2015-01-30 2 views
0

У меня пустое изображение, и на этом я положил некоторые наклейки, после чего я хочу сохранить изображения. Но когда я сохраняю изображение, я вижу, что его края искажены.Края растрового изображения были искажены при сохранении

EDIT: есть проблема. может быть компромиссом с краевым искажением с положением наклейки .. он отображает положение наклейки. когда я использую черно-белое изображение 4000 * 2250 в качестве фонового изображения, и когда я использую 2000 * 1500 в качестве фонового изображения, это не создает никаких проблем с положением, но chg resoulation изображения.

это ПИК перед сохранением внутри приложения:

normal picture

это ПОС после сохранения в моей сд карты:

edge got distorted

Вот мой растровый спасительной код:

public Bitmap saveCurrentBitmap() { 
     EditActivity act = (EditActivity) mContext; 

     Bitmap origRawImage = act.getRawBitmap(); 
     // copy to mutable 
     Bitmap rawImage = origRawImage.copy(Bitmap.Config.ARGB_8888, true); 
     if (rawImage == null) 
      return null; 

     Canvas canvas = new Canvas(rawImage); 

     // get scale factor 
     RectF scaledImg = act.getImageView().getInnerBitmapSize(); 
     float scale = rawImage.getWidth()/scaledImg.width(); 

     List<DraggableBitmap> stampList = act.getImageView().getOverlayList(); 
     if (stampList.size() > 0) { 
      Enumeration<DraggableBitmap> e = Collections.enumeration(stampList); 
      while (e.hasMoreElements()) { 
       DraggableBitmap dBmp = (DraggableBitmap) e.nextElement(); 

       Matrix finalMtx = new Matrix(); 

       // calculate margin and move back 
       Matrix marginMtx = dBmp.getMarginMatrix(); 
       float[] moveArr = new float[9]; 
       marginMtx.getValues(moveArr); 
       float x = -(moveArr[0]); 
       float y = -(moveArr[3]); 
       Matrix moveBackMtx = new Matrix(); 
       moveBackMtx.postTranslate(x, y); 

       // current manipulate matrix (rotate, zoom, move..) 
       Matrix manipulateMtx = dBmp.getCurrentMatrix(); 
       Matrix scaleMtx = new Matrix(); 

       // scale to original size 
       scaleMtx.postScale(scale, scale, 0, 0); 

       manipulateMtx = (manipulateMtx == null) ? new Matrix() : manipulateMtx; 
       finalMtx.postConcat(manipulateMtx); 
       finalMtx.postConcat(moveBackMtx); 
       finalMtx.postConcat(scaleMtx); 
       canvas.drawBitmap(dBmp.mBitmap, finalMtx, null); 
      } 
     } 

     return rawImage; 
    } 

и это код, называя savebitmap

private void saveImage() { 
     Bitmap bmpToSave = mActivityHelper.saveCurrentBitmap(); 
     this.getBaseApplication().setRawBitmap(bmpToSave); 
     savedImagePath = SaveToStorageUtil.save(bmpToSave, this); 
     ImageScannerAdapter adapter = new ImageScannerAdapter(this); 
     adapter.scanImage(savedImagePath); 
    } 
+0

Извините, но я не вижу края, которые искажены. Я вижу только, что второе изображение меньше и менее детализировано. И в чем вопрос? – greenapps

+0

'saveCurrentBitmap()' не сохраняет растровое изображение. Он возвращает только битмап. – greenapps

+0

код saveimage загружен и есть искажение, если вы внимательно посмотрите @greenapps – Developer

ответ

0

Попробуйте это:

Paint p = new Paint(); 
p.setAntiAlias(true); 
canvas.drawBitmap(dBmp.mBitmap, finalMtx, p); 
+0

не сработал :(еще искажение есть – Developer

+0

см. Отредактированный вопрос. – Developer

Смежные вопросы