android图像处理系统1.3

最终版源代码:https://github.com/nuptboyzhb/AndroidImageProSystem
该版本由很大的更新。在处理图像的方式上,我引入了java中的矩阵类(Matrix)。该类由
http://math.nist.gov/javanumerics/jama/提供。实现了矩阵的加、减、乘、转置、矩阵的逆、范数、行列式等算法,并有多种构造函数和获得矩阵数据的方法。在图像处理系统1.3中,我们将图像的RGB数据保存为矩阵(Matrix),为后续的算法扩充打下了坚实的基础。我们在ImageProcess.java中引入包import Jama.Matrix;为了封装图像处理的过程,我们将获取RGB的模块分别封装成3个成员函数,将生成bitmap图像封装成函数makeToBitmap。并实现了图像翻转90度的算法。

@author:郑海波 2012-08-29 转载请声明:http://blog.csdn.net/nuptboyzhb/article/details/7925994

相关博客:http://blog.csdn.net/nuptboyzhb/article/details/7857366

http://blog.csdn.net/nuptboyzhb/article/details/7852999

[运行界面及效果]


android图像处理系统1.3_第1张图片

获取RGB及灰度的代码:
[java]

private Matrix getDataR(int[] pix,int width,int height){    Matrix dataR=new Matrix(width,height,0.0);    // Apply pixel-by-pixel change    int index = 0;    for (int y = 0; y < height; y++)    {    for (int x = 0; x < width; x++)    {    int r = ((pix[index] >> 16) & 0xff);      dataR.set(x, y, r);    index++;    } // x    } // y    return dataR;}private Matrix getDataG(int[] pix,int width,int height){    Matrix dataG=new Matrix(width,height,0.0);    // Apply pixel-by-pixel change    int index = 0;    for (int y = 0; y < height; y++)    {    for (int x = 0; x < width; x++)    {    int g = ((pix[index] >> 8) & 0xff);      dataG.set(x, y, g);    index++;    } // x    } // y    return dataG;}private Matrix getDataB(int[] pix,int width,int height){    Matrix dataB=new Matrix(width,height,0.0);    // Apply pixel-by-pixel change    int index = 0;    for (int y = 0; y < height; y++)    {    for (int x = 0; x < width; x++)    {    int b =(pix[index] & 0xff);      dataB.set(x, y, b);    index++;    } // x    } // y    return dataB;}private Matrix getDataGray(int[] pix,int width,int height){    Matrix dataGray=new Matrix(width,height,0.0);    // Apply pixel-by-pixel change    int index = 0;    for (int y = 0; y < height; y++)    {    for (int x = 0; x < width; x++)    {    int r = ((pix[index] >> 16) & 0xff);    int g = ((pix[index] >> 8) & 0xff);    int b = (pix[index] & 0xff);    int gray=(int)(0.3*r+0.59*g+0.11*b);      dataGray.set(x, y, gray);      index++;    } // x    } // y    return dataGray;}



旋转90度的函数代码:
[java]

public Bitmap rotate90(Bitmap myBitmap) {// Create new array    int width = myBitmap.getWidth();    int height = myBitmap.getHeight();    int[] pix = new int[width * height];    myBitmap.getPixels(pix, 0, width, 0, 0, width, height);    Matrix dataR=getDataR(pix, width, height);    Matrix dataG=getDataG(pix, width, height);    Matrix dataB=getDataB(pix, width, height);    //Matrix dataGray=getDataGray(pix, width, height);    /////////////////////////////////////////////////////////    dataR=dataR.transpose();    dataG=dataG.transpose();    dataB=dataB.transpose();    ///////////////////////////////////////////////////////////////    // Change bitmap to use new array    Bitmap bitmap=makeToBitmap(dataR, dataG, dataB, width, height);    myBitmap = null;    pix = null;    return bitmap;}



封装makeToBitmap代码:
[java代码]

public Bitmap rotate90(Bitmap myBitmap) {// Create new array    int width = myBitmap.getWidth();    int height = myBitmap.getHeight();    int[] pix = new int[width * height];    myBitmap.getPixels(pix, 0, width, 0, 0, width, height);    Matrix dataR=getDataR(pix, width, height);    Matrix dataG=getDataG(pix, width, height);    Matrix dataB=getDataB(pix, width, height);    //Matrix dataGray=getDataGray(pix, width, height);    /////////////////////////////////////////////////////////    dataR=dataR.transpose();    dataG=dataG.transpose();    dataB=dataB.transpose();    ///////////////////////////////////////////////////////////////    // Change bitmap to use new array    Bitmap bitmap=makeToBitmap(dataR, dataG, dataB, width, height);    myBitmap = null;    pix = null;    return bitmap;}



更多相关文章

  1. Android设置背景图像重复【整理自网络】
  2. Android Audio代码分析13 - AudioTrack::getPosition函数
  3. Android Studio3.3.2 +OpenCV3.4.3图像处理
  4. Android图像处理相关文章
  5. Android 中调试手段 打印函数调用栈信息
  6. Android的Matrix图像变化原理
  7. Android 利用JNI调用Android Java代码函数

随机推荐

  1. 学习c语言需要什么软件?
  2. C++学习之new()和malloc()函数
  3. 浅谈C++生成GUID的两种方法
  4. C#中的console是什么意思
  5. c语言数组怎么定义?
  6. c语言属于什么类型的编程语言
  7. 什么是虚函数
  8. 如何在C#中使用Bogus去创建模拟数据
  9. C# 快速手动构建文件服务器
  10. 在C/C++中如何使用extern关键字