继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

图片合成

哈士奇WWW
关注TA
已关注
手记 503
粉丝 71
获赞 400
@Override
protected void initView() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            //创建一个message
            //设置what字段的值为UPDATE_TEXT,主要是为了区分不同的message
            //设置message.obj的内容
            //调用Handler的message对象
            //handler中的handlermessage对象是在主线程中运行的
            Message message = new Message();
            message.what = UPDATE_TEXT;
            message.obj = compositeImages();
            handler.sendMessage(message);


        }
    }).start();

}
private Handler handler = new Handler() {

    public void handleMessage(Message msg) {
        switch (msg.what) {
            case UPDATE_TEXT:
                //在这里可以进行UI操作
                //对msg.obj进行String强制转换
                Bitmap a = (Bitmap) msg.obj;
                // 微信分享
                bitmap=a;
                share_iv.setImageBitmap(a);
                    break;
        }
    }

};

private ShareAction shareAction = new ShareAction(ShareActivity.this)
        .setDisplayList(SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
        .setShareboardclickCallback(new ShareBoardlistener() {
            @Override
            public void (SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
                UMImage image = new UMImage(ShareActivity.this, bitmap);//本地文件
                String uid=LocalStorage.get("user_id").toString();
                int l=uid.length();
                if (l<7)
                {
                    if (l==3){
                        uid="1111"+uid;
                    }else if(l==4){
                        uid="111"+uid;
                    }else if(l==5){
                        uid="11"+uid;
                    }else if(l==6){
                        uid="1"+uid;
                    }

                }
                String string="我是橙子交友的第"+uid+"个用户";
                switch (share_media) {
                    case WEIXIN:
                        new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(shareListener)
                                .withText(string)
                                .withMedia(image)
                                .setCallback(shareListener)
                                .share();
                        break;
                    case WEIXIN_CIRCLE:
                        new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(shareListener)
                                .withText(string)
                                .withMedia(image)
                                .setCallback(shareListener)
                                .share();
                        break;

                }
            }
        });

private UMShareListener shareListener = new UMShareListener() {
    /**
     * @descrption 分享开始的回调
     * @param platform 平台类型
     */
    @Override
    public void onStart(SHARE_MEDIA platform) {

    }

    /**
     * @descrption 分享成功的回调
     * @param platform 平台类型
     */
    @Override
    public void onResult(SHARE_MEDIA platform) {
        MobclickAgent.onEvent(getApplicationContext(), "share");

        //获取是否是今天抽奖
        String upLoad_day=mStoreUtils.getUserUploadLuckDate();
        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
        Date now = new Date();
        String nowDay = sf.format(now);
        mStoreUtils.setUserShareDate(nowDay);
        if (nowDay.equals(upLoad_day)){
           int share_time= mStoreUtils.getUnreadMsgShare();
            if (share_time<2){
                int luck_time=mStoreUtils.getSumLuck();
                mStoreUtils.setSumLuck(luck_time-2);
                mStoreUtils.setSumLuckShare(share_time+1);
            }else {

            }

        }else {
            mStoreUtils.setSumLuckShare(0);
            int luck_time=mStoreUtils.getSumLuck();
            mStoreUtils.setSumLuck(luck_time-2);
            mStoreUtils.setUserUploadLuckDate(nowDay);
        }

    }

    /**
     * @descrption 分享失败的回调
     * @param platform 平台类型
     * @param t 错误原因
     */
    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) {
    }

    /**
     * @descrption 分享取消的回调
     * @param platform 平台类型
     */
    @Override
    public void onCancel(SHARE_MEDIA platform) {

    }
};
/**
 * 图像的合成,可以通过在同一个Canvas中绘制两张图片。
 * 只是在绘制第二章图片的时候,需要给Paint指定一个变幻模式TransferMode。
 * 在Android中有一个XFermode所有的变幻模式都是这个类的子类
 * 我们需要用到它的一个子类PorterDuffXfermode,关于这个类,其中用到PorterDuff类
 * 这个类很简单,就包含一个Enum是Mode,其中定义了一组规则,这组规则就是如何将
 * 一张图像和另一种图像进行合成
 * 关于图像合成有四种模式,LIGHTEN,DRAKEN,MULTIPLY,SCREEN
 */
   private Bitmap compositeImages(){
        String ph= LocalStorage.get("avatar").toString();
        System.out.println("ph:="+ph);
        Bitmap dstBitmap=getBitmapFromUri(ph);
        //获取这个图片的宽和高
        int width = dstBitmap.getWidth();
        int height = dstBitmap.getHeight();
//定义预转换成的图片的宽度和高度
        DisplayMetrics dm = new DisplayMetrics();
         //获取屏幕信息
         getWindowManager().getDefaultDisplay().getMetrics(dm);
         int screenWidth = dm.widthPixels;
        int newWidth = screenWidth/7;
        int newHeight = screenWidth/7;

        //计算缩放率,新尺寸除原始尺寸
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        // 创建操作图片用的matrix对象
        Matrix matrix = new Matrix();
        // 缩放图片动作
        matrix.postScale(scaleWidth, scaleHeight);
// 创建新的图片
        Bitmap resizedBitmap = Bitmap.createBitmap(dstBitmap, 0, 0,
                width, height, matrix, true);
//        Bitmap dstBitmap=BitmapFactory.decodeResource(getResources(), R.mipmap.news_pressed);
        Bitmap srcBitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.start_page1_share);
        Bitmap bmp = null;
        //下面这个Bitmap中创建的函数就可以创建一个空的Bitmap
        System.out.println("srcBitmap.getWidth():="+srcBitmap);
        bmp = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
        Paint paint = new Paint();
        Canvas canvas = new Canvas(bmp);
        //首先绘制第一张图片,很简单,就是和方法中getDstImage一样

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
        canvas.drawBitmap(resizedBitmap, 20, 10, paint);
        paint.setTextSize(getResources().getDimensionPixelSize(R.dimen.set_text_size));
        String uid=LocalStorage.get("user_id").toString();
        int l=uid.length();
        if (l<7)
        {
            if (l==3){
                uid="1111"+uid;
            }else if(l==4){
                uid="111"+uid;
            }else if(l==5){
                uid="11"+uid;
            }else if(l==6){
                uid="1"+uid;
            }

        }
        String string="我是第"+uid+"个用户";
        canvas.drawText( string,srcBitmap.getWidth()/3, screenWidth/13,paint );

        canvas.drawBitmap(srcBitmap, 0, 0, paint);

        //在绘制第二张图片的时候,我们需要指定一个Xfermode
        //这里采用Multiply模式,这个模式是将两张图片的对应的点的像素相乘
        //,再除以255,然后以新的像素来重新绘制显示合成后的图像


        return bmp;
    }
    private Bitmap getBitmapFromUri(String uri) {
        Bitmap map = null;
        try {
            // 读取uri所在的图片
//            Bitmap bitmap = MediaStore.Images.Media.getBitmap(SetActivity.this.getContentResolver(), uri);
            URL url = new URL(uri);
            URLConnection conn = url.openConnection();
            conn.connect();
            InputStream in;
            in = conn.getInputStream();
            map = BitmapFactory.decodeStream(in);
            // TODO Auto-generated catch block
            return map;
        } catch (Exception e) {
            System.out.println("eeeeeeeeeee:="+e);
            e.printStackTrace();
            return null;
        }
    }

原文链接:http://www.apkbus.com/blog-851511-72752.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP