在Android中2D中实现对图片的倒影

企鹅博客
企鹅博客
企鹅博客
25193
文章
0
评论
2020年8月31日16:37:16 评论 35 views

package com.joe.bitmap;

import Android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.Bitmap.Config;
import android.util.Log;

public class BitmapUtils {
    private static final String TAG = "BitmapUtils";

    /**
     * Set the pixels's alpha. alpha's value decrease by the bit's height
     * @param pixels
     *            the array which contains pixels.
     * @param srcWidth
     *            the bitmap's width
     * @param srcHeight
     *            the bitmap's height
     * @param alphastart
     *            the first pixels's alpha
     * @param percent
     *            the line's fouction's slope (y = mx+b;)
     *            such as: alphastart=0x2fffffff;(alpha's value 0x2f)
     *             m = 0x2f/(height * percent) (if the shadow fill full of the
     *            bitmap,k =1. otherwise the shadow only in a half of the bitmap
     *            percent = 0.5) alpha = m*height + alphaLagest
     *            The percent max value are 1!
     * @param b
     *            the line's fouction's const (y = mx+b)
     */
    public static void shadowFromPixels(int[] pixels, int srcWidth,
        int srcHeight, int alphastart, float percent) {
        int b = alphastart;
        //if need display a  part of (such as 1/2,1/3...) bitmap
        int alpahLine = (int) (srcHeight * percent);
       
        float temp = (alphastart >>> 24);
        percent = ((temp / (srcHeight * percent)));
        int alpha = 0;
       
        Log.d(TAG, "shadowByPixels: percent=" + percent + "\tb=" + b
                + "\t temp=" + temp + "\tsrcHeight=" + srcHeight);
       
        for (int i = 0; i < srcHeight; i++) {
            if(i < alpahLine){
                alpha = b - (((int) (i * percent)) << 24);
            }else{
                alpha = 0x00ffffff;
            }
            for (int j = 0; j < srcWidth; j++) {
                pixels[j + i * srcWidth] = pixels[j + i * srcWidth] & alpha;
            }
        }
    }

    /**
     * Set the pixels's alpha. alpha's value decrease by the bit's height
     *
     * @param pixels the array which contains pixels.
     * @param srcWidth  the bitmap's width
     * @param srcHeight the bitmap's height
     * @param alphastart the first pixels's alpha
     */
    public static void shadowFromPixels(int[] pixels, int srcWidth,
            int srcHeight, int alphastart) {
            int b = alphastart;
            float temp = (alphastart >>> 24);
            float percent = (temp / srcHeight) ;
            int alpha = 0;
            Log.d(TAG, "shadowByPixels: percent=" + percent + "\tb=" + b
                    + "\t temp=" + temp + "\tsrcHeight=" + srcHeight);
            for (int i = 0; i < srcHeight; i++) {
                alpha = b -(((int) (i * percent)) << 24);
                for (int j = 0; j < srcWidth; j++) {
                    pixels[j + i * srcWidth] = pixels[j + i * srcWidth] & alpha;
                }
            }
        }
   
//我的这个 算法有点问题:
   我只考虑到 图片中每一行的alpha值是相同的,大多数图片是这样,但是有些图片不是哦.
   这里是把每一行的alpha值,重新设置成了一个值,这是不能通用的.
通用的做法是把 这行的alpha值取出来,乘以一个比例
当前行号 = a,(0~a总)
需要显示总的行号 = a总

继续阅读
企鹅博客
  • 本文由 发表于 2020年8月31日16:37:16
  • 转载请务必保留本文链接:https://www.qieseo.com/148392.html
Android短信应用——短信信息实时获取 Linux编程

Android短信应用——短信信息实时获取

我们知道,只需通过代码就可以读到收件箱中的短信,发件箱中的短信;但是却没办法在短信发来的瞬间获取;如果我们在短信发来的一瞬间能得到相应的信息内容,那么我们就可以依次来展开很多应用了——也就是通过短信去...
LRU缓存设计 Linux编程

LRU缓存设计

缓存的数据结构采用哈希表,key到value的映射。 网上有些资料采用记录数据的使用时刻 实现LRU策略,此处采用双向链表 实现LRU策略。LRU Least Recently Used,MRUMos...
R 语言 简单介绍 Linux编程

R 语言 简单介绍

一.统计分析软件说明  统计分析软件有:SPSS, SAS、R语言,Matlab,S-PLUS,S-Miner。 SPSS: 最简单的,都是菜单操作,不过不利于二次程序开发。 SAS: 需要...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: