2013-12-17 19 views
5

Mogę maskować obrazy w widoku siatki, ale problem polega na tym, jak wycinać lub przycinać zawartość maski w maskowaniu. mi pomóc z jakiegoś pomysłu i jakiegoś demo ..jak mogę wyciąć lub przyciąć zdjęcie treści?

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(); 
    } 
} 

Odpowiedz

0

Hi poniżej jest może jakąś pomoc dla ciebie

  1. potrzeba dopasowania obrazu

    ostateczna długo 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); 
    

Następny jak przyciąć obraz

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); 

funkcja zasobów Decode

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; 
    } 

funkcja 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; 
      } 
     } 
    } 

funkcja 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; 
    } 

funkcja ScalingLogic

public static enum ScalingLogic { 
     CROP, FIT 
    } 

funkcja 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); 
     } 
    }