resultBitmap = (Bitmap) intent.getParcelableExtra("resultBitmap")
// 图片与处理
BitmapFilter bitmapFilter = new BitmapFilter(resultBitmap)
bitmapFilter.changeGrey()
resultBitmap = bitmapFilter.getBitmap()
以下是BitmapFilter
package com.example.androcr
import android.graphics.Bitmap
import android.graphics.Color
/**
* 图像预处理腔嫌类
* @author Administrator
*/
public class BitmapFilter {
private Bitmap bitmap
private int iw
private int ih
private int[] pixels
public BitmapFilter(Bitmap bitmap) {
this.bitmap = bitmap
this.iw = bitmap.getWidth()
this.ih = bitmap.getHeight()
pixels = new int[iw * ih]
// 将bitmap转化为pixel数组
bitmap.getPixels(pixels, 0, iw, 0, 0, iw, ih)
}
public Bitmap getBitmap() {
//漏局 将pixel数组转化为bitmap
bitmap = Bitmap.createBitmap(pixels, iw, ih, Bitmap.Config.ARGB_8888)
return bitmap
}
/**
* 图像的二值化
*/
public void changeGrey() {
// 选取的阈值
int grey = 120
int pixel
int alpha, red, green, blue
for (int i = 0i <返圆让 iw * ihi++) {
pixel = pixels[i]
alpha = Color.alpha(pixel)
red = Color.red(pixel)
green = Color.green(pixel)
blue = Color.blue(pixel)
red = (red >grey) ? 255 : 0
green = (green >grey) ? 255 : 0
blue = (blue >grey) ? 255 : 0
pixels[i] = alpha <<24 | red <<16 | green <<8 | blue
}
}
/**
* 图像的锐化
*/
public void sharp() {
// 像素中间变量
int tempPixels[] = new int[iw * ih]
for (int i = 0i <iw * ihi++) {
tempPixels[i] = pixels[i]
}
int alpha
int red6, red5, red8, sharpRed
int green5, green6, green8, sharpGreen
int blue5, blue6, blue8, sharpBlue
for (int i = 1i <ih - 1i++) {
for (int j = 1j <iw - 1j++) {
alpha = Color.alpha(pixels[i * iw + j])
// 对图像进行尖锐化
// 锐化red
red6 = Color.red(pixels[i * iw + j + 1])
red5 = Color.red(pixels[i * iw + j])
red8 = Color.red(pixels[(i + 1) * iw + j])
sharpRed = Math.abs(red6 - red5) + Math.abs(red8 - red5)
// 锐化green
green5 = Color.green(pixels[i * iw + j])
green6 = Color.green(pixels[i * iw + j + 1])
green8 = Color.green(pixels[(i + 1) * iw + j])
sharpGreen = Math.abs(green6 - green5)
+ Math.abs(green8 - green5)
// 锐化blue
blue5 = Color.blue(pixels[i * iw + j])
blue6 = Color.blue(pixels[i * iw + j + 1])
blue8 = Color.blue(pixels[(i + 1) * iw + j])
sharpBlue = Math.abs(blue6 - blue5)
+ Math.abs(blue8 - blue5)
// 处理颜色溢出
if (sharpRed >255)
sharpRed = 255
if (sharpGreen >255)
sharpGreen = 255
if (sharpBlue >255)
sharpBlue = 255
tempPixels[i * iw + j] = alpha <<24 | sharpRed <<16
| sharpGreen <<8 | sharpBlue
}
}
pixels = tempPixels
}
/**
* 中值滤波
*/
public void median() {
// 对图像进行中值滤波
int alpha, red, green, blue
int red4, red5, red6
int green4, green5, green6
int blue4, blue5, blue6
for (int i = 1i <ih - 1i++) {
for (int j = 1j <iw - 1j++) {
// alpha值保持不变
alpha = Color.alpha(pixels[i * iw + j])
// 处理red分量
red4 = Color.red(pixels[i * iw + j - 1])
red5 = Color.red(pixels[i * iw + j])
red6 = Color.red(pixels[i * iw + j + 1])
// 水平方向进行中值滤波
if (red4 >= red5) {
if (red5 >= red6) {
red = red5
} else {
if (red4 >= red6) {
red = red6
} else {
red = red4
}
}
} else {
if (red4 >red6) {
red = red4
} else {
if (red5 >red6) {
red = red6
} else {
red = red5
}
}
}
// 处理green分量
green4 = Color.green(pixels[i * iw + j - 1])
green5 = Color.green(pixels[i * iw + j])
green6 = Color.green(pixels[i * iw + j + 1])
// 水平方向进行中值滤波
if (green4 >= green5) {
if (green5 >= green6) {
green = green5
} else {
if (green4 >= green6) {
green = green6
} else {
green = green4
}
}
} else {
if (green4 >green6) {
green = green4
} else {
if (green5 >green6) {
green = green6
} else {
green = green5
}
}
}
// 处理blue分量
blue4 = Color.blue(pixels[i * iw + j - 1])
blue5 = Color.blue(pixels[i * iw + j])
blue6 = Color.blue(pixels[i * iw + j + 1])
// 水平方向进行中值滤波
if (blue4 >= blue5) {
if (blue5 >= blue6) {
blue = blue5
} else {
if (blue4 >= blue6) {
blue = blue6
} else {
blue = blue4
}
}
} else {
if (blue4 >blue6) {
blue = blue4
} else {
if (blue5 >blue6) {
blue = blue6
} else {
blue = blue5
}
}
}
pixels[i * iw + j] = alpha <<24 | red <<16 | green <<8
| blue
}
}
}
/**
* 图像的平滑
*/
public void smooth() {
int[] tempPixels = new int[iw * ih]
//图像的平滑
int min = -1000
int max = 1000
for (int i = 0i <ihi++) {
for (int j = 0j <iwj++) {
if (i == 0 || i == 1 || i == ih - 1 || i == ih - 2 || j == 0
|| j == 1 || j == iw - 1 || j == iw - 2) {
tempPixels[i * iw + j] = pixels[i * iw + j]
} else {
// 中心的九个像素点
float average = (
pixels[i * iw + j]
+ pixels[i * iw + j - 1]
+ pixels[i * iw + j + 1]
+ pixels[(i - 1) * iw + j]
+ pixels[(i - 1) * iw + j - 1]
+ pixels[(i - 1) * iw + j + 1]
+ pixels[(i + 1)]
+ pixels[(i + 1) * iw + j]
+ pixels[(i + 1) * iw + j - 1]
) / 9
tempPixels[i * iw + j] = (int) (average)
}
if (tempPixels[i * iw + j] <min)
min = tempPixels[i * iw + j]
if (tempPixels[i * iw + j] >max)
max = tempPixels[i * iw + j]
}
}
for (int i = 0i <iw * ihi++) {
tempPixels[i] = (tempPixels[i] - min) * 255 / (max - min)
}
pixels = tempPixels
}
}
正好!我做图像处理也遇到这样的问题。我觉得是因为GetPixel这个函数处理耗时较多,加上多个for循环,使得CPU大量早袜磨被占用,在VB中运行则易发生错误或死机。生产exe文件看看,运行时千万不能点鼠标或干别的事,否则立马死机,很久很久程序才会执陆斗行完。主要是:GetPixel这个函数处理耗时较多!另外,我打算找找好锋别的函数或者方法来获取像素,下来我们可以交流交流~~~~
1、Adobe?PhotoshopTouch
Adobe公司专为手机设计的,可以运行在苹果系统和安卓系统上。支持图层,选择,调整,过滤器,和其他工具,如刷子,刷子,橡皮,选择,等等。您可以从本地存储中选择图片或直接使用相机拍照。
2、pixlrexpress
android图像处理软件,内置600多种特效和滤波器,包括优秀的自由图形软件常见特效滤波器应用、曝光对比调整、相框和特殊光插件等。
但更进一步,增加了移除红眼、移除特定颜色、移除噪音或锐化、加入白光、轴移镜等功能,而每个功能,每个效果都提供详细的调整。让普通用户也可以简单的使特效更加专业。
3、泼辣修图
北京泼辣熊科技有限公司开发推出的免费图像处理软件。用户不需要下载软件并输入网址即可使用。泼辣的图形已经发布了网络版本、ios版本、安卓版本、win10版本和mac版本。
4、天天P图?
腾讯的优图团队已经推出了一个全方位的美图神器后,魅力和水印相机。这是基于团队自己的研究。人脸检测技术和国内一流的五字定位图像处理技术,引入了自然美容妆、魔法妆、疯狂妆、星光镜、光点虚拟、智能景深等多项创新功能。
5、PicsArt照片
一个免费的移动图像编辑器是一个安卓平台的应用程序,以收集照片和照片处理。它可以直接绘制、效果处理、文本添加、添加艺术效果。它也是摄影艺术家的社交网络和摄影作品。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)