2013-12-17 7 views
5

मैं ग्रिडव्यू में छवियों को मुखौटा कर सकता हूं लेकिन समस्या यह है कि मैं मास्किंग में छवि की मास्क सामग्री को कैसे कट या फसल कर सकता हूं। मुझे कुछ विचार और कुछ डेमो के लिए मदद ..मैं सामग्री छवि बनाने या कटौती कैसे कर सकता हूं?

public void makeMaskImage(ImageView mImageView, Bitmap mBitmap, 
     int MASK_IMAGEVIEW, int IMAGEVIEW_THUMB_BACKGROUND) { 
    try { 
     Bitmap mask = BitmapFactory.decodeResource(mContext.getResources(),MASK_IMAGEVIEW); 
     Bitmap result = Bitmap.createBitmap(mask.getWidth(), 
       mask.getHeight(), Config.ARGB_8888); 
     Canvas mCanvas = new Canvas(result); 
     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 

     if (mBitmap == null) { 
      mBitmap = BitmapFactory.decodeResource(mContext.getResources(), 
        R.drawable.no_image_friend); 
      mImageView.setImageBitmap(mBitmap); 
      return; 
     } 

     mCanvas.drawBitmap(mBitmap, 0, 0, null); 
     mCanvas.drawBitmap(mask, 0, 0, paint); 
     paint.setXfermode(null); 
     try { 
      mImageView .setImageBitmap(Bitmap_process(getImageBuffer(result))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     mImageView.setScaleType(ScaleType.CENTER); 
     mImageView.setBackgroundResource(IMAGEVIEW_THUMB_BACKGROUND); 
    } catch (OutOfMemoryError e) { 
     e.printStackTrace(); 
    } 
} 

उत्तर

0

हाय नीचे है कुछ मदद हो सकता है आप

  1. फिट छवि की जरूरत के लिए

    अंतिम लंबे STARTTIME = SystemClock.uptimeMillis() ;

    // Part 1: Decode image 
        Bitmap unscaledBitmap = ScalingUtilities.decodeResource(getResources(), mSourceId, 
          mDstWidth, mDstHeight, ScalingLogic.FIT); 
    
        // Part 2: Scale image 
        Bitmap scaledBitmap = ScalingUtilities.createScaledBitmap(unscaledBitmap, mDstWidth, 
          mDstHeight, ScalingLogic.FIT); 
        unscaledBitmap.recycle(); 
    
        // Calculate memory usage and performance statistics 
        final int memUsageKb = (unscaledBitmap.getRowBytes() * unscaledBitmap.getHeight())/1024; 
        final long stopTime = SystemClock.uptimeMillis(); 
    
        // Publish results 
        mResultView.setText("Time taken: " + (stopTime - startTime) 
          + " ms. Memory used for scaling: " + memUsageKb + " kb."); 
        mImageView.setImageBitmap(scaledBitmap); 
    

अगली छवि

final long startTime = SystemClock.uptimeMillis(); 

      // Part 1: Decode image 
      Bitmap unscaledBitmap = ScalingUtilities.decodeResource(getResources(), mSourceId, 
        mDstWidth, mDstHeight, ScalingLogic.CROP); 

      // Part 2: Scale image 
      Bitmap scaledBitmap = ScalingUtilities.createScaledBitmap(unscaledBitmap, mDstWidth, 
        mDstHeight, ScalingLogic.CROP); 
      unscaledBitmap.recycle(); 

      // Calculate memory usage and performance statistics 
      final int memUsageKb = (unscaledBitmap.getRowBytes() * unscaledBitmap.getHeight())/1024; 
      final long stopTime = SystemClock.uptimeMillis(); 

      // Publish results 
      mResultView.setText("Time taken: " + (stopTime - startTime) 
        + " ms. Memory used for scaling: " + memUsageKb + " kb."); 
      mImageView.setImageBitmap(scaledBitmap); 

डिकोड संसाधन समारोह

public static Bitmap decodeResource(Resources res, int resId, int dstWidth, int dstHeight, 
      ScalingLogic scalingLogic) { 
     Options options = new Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeResource(res, resId, options); 
     options.inJustDecodeBounds = false; 
     options.inSampleSize = calculateSampleSize(options.outWidth, options.outHeight, dstWidth, 
       dstHeight, scalingLogic); 
     Bitmap unscaledBitmap = BitmapFactory.decodeResource(res, resId, options); 

     return unscaledBitmap; 
    } 

calculateSampleSize समारोह

public static int calculateSampleSize(int srcWidth, int srcHeight, int dstWidth, int dstHeight, 
      ScalingLogic scalingLogic) { 
     if (scalingLogic == ScalingLogic.FIT) { 
      final float srcAspect = (float)srcWidth/(float)srcHeight; 
      final float dstAspect = (float)dstWidth/(float)dstHeight; 

      if (srcAspect > dstAspect) { 
       return srcWidth/dstWidth; 
      } else { 
       return srcHeight/dstHeight; 
      } 
     } else { 
      final float srcAspect = (float)srcWidth/(float)srcHeight; 
      final float dstAspect = (float)dstWidth/(float)dstHeight; 

      if (srcAspect > dstAspect) { 
       return srcHeight/dstHeight; 
      } else { 
       return srcWidth/dstWidth; 
      } 
     } 
    } 
फसल के लिए कैसे

createScaledBitmap समारोह

public static Bitmap createScaledBitmap(Bitmap unscaledBitmap, int dstWidth, int dstHeight, 
      ScalingLogic scalingLogic) { 
     Rect srcRect = calculateSrcRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), 
       dstWidth, dstHeight, scalingLogic); 
     Rect dstRect = calculateDstRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), 
       dstWidth, dstHeight, scalingLogic); 
     Bitmap scaledBitmap = Bitmap.createBitmap(dstRect.width(), dstRect.height(), 
       Config.ARGB_8888); 
     Canvas canvas = new Canvas(scaledBitmap); 
     canvas.drawBitmap(unscaledBitmap, srcRect, dstRect, new Paint(Paint.FILTER_BITMAP_FLAG)); 

     return scaledBitmap; 
    } 

ScalingLogic समारोह

public static enum ScalingLogic { 
     CROP, FIT 
    } 

calculateDstRect समारोह

public static Rect calculateDstRect(int srcWidth, int srcHeight, int dstWidth, int dstHeight, 
      ScalingLogic scalingLogic) { 
     if (scalingLogic == ScalingLogic.FIT) { 
      final float srcAspect = (float)srcWidth/(float)srcHeight; 
      final float dstAspect = (float)dstWidth/(float)dstHeight; 

      if (srcAspect > dstAspect) { 
       return new Rect(0, 0, dstWidth, (int)(dstWidth/srcAspect)); 
      } else { 
       return new Rect(0, 0, (int)(dstHeight * srcAspect), dstHeight); 
      } 
     } else { 
      return new Rect(0, 0, dstWidth, dstHeight); 
     } 
    } 
संबंधित मुद्दे