android图像处理系统1.3
项目成品:手相评分:http://as.baidu.com/a/item?docid=2758385
该版本由很大的更新。在处理图像的方式上,我引入了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
[运行界面及效果]
获取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; }