最近刚接到一个需求,就是点击按钮的时候图片会顺时针旋转90度,直接使用
Matrix转换就行了。然后需要将彩色图转化为灰度图,我的个天啊,这玩意以前用opencl做过简单的一匹,现在我打算用代码实现,所以翻了很多博客,这里做一个记录,以后好复制。
色彩图转化为灰度图方法有三
加权法 GRAY==0.3*R+0.59*G+0.11*B
均值法 GRAY==(R+G+B)/3
最大值法 max(R,G,B)
这里是用的加权
var colorToGrayscale: (Bitmap) -> Bitmap? = {
var width: Int = it.width
var height: Int = it.height
var pixels: IntArray = IntArray(width * height)//初始化一个int数组 大小和原图的数组一样大
it.getPixels(pixels, 0, width, 0, 0, width, height)//将图片所有的颜色信息放入pixels中
for (i in 0 until height) {
for (j in 0 until width) {
var gray: Int = ColorToGrayUtils.getGray(pixels, width, i, j)
//分离三原色
var red: Int = ColorToGrayUtils.getRed(gray)
var green: Int = ColorToGrayUtils.getGreen(gray)
var blue: Int = ColorToGrayUtils.getBlue(gray)
pixels[width * i + j] = ColorToGrayUtils.getGrayResult(gray, red, green, blue)
//新建图片
var newBmp: Bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
//设置图片数据
newBmp.setPixels(pixels, 0, width, 0, 0, width, height);
newBmp
public static int getGray(int[] pixels, int width, int i, int j) {
return pixels[width * i + j];
public static int getRed(int gray) {
return ((gray & 0x00FF0000) >> 16);
public static int getGreen(int gray) {
return ((gray & 0x0000FF00) >> 8);
public static int getBlue(int gray) {
return (gray & 0x000000FF);
public static int getGrayResult(int gray, int red, int green, int blue) {
int alpha = 0xFF << 24;
int grayResult1 = (int) (0.3 * red + 0.59 * green + 0.11 * blue);
int grayResult = alpha | (grayResult1 << 16) | (grayResult1 << 8) | grayResult1;
return grayResult;
据说opencv在效率上完胜我们,我们也可以自己建一个jni 把耗时部分打包成os包就行了。
这篇文章是记录我们平时在android开发过程中,经常会用到的类型转换,主要包括String、byte[]、bitmap、inputstram、Drawable之间的转换,代码如下:
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStrea
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import android.graphics.Bitmap;
import android.grap...
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985
QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing/
今天给大家提供一个常用的工具类。
Android开发之常用必备工具类图片bitmap转成字符串string与String字符串转换为bitmap图片格式
下面是代码。当然最下面会分享出来...
public byte[] Bitmap2Base64(Bitmap bitmap) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, o
将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
[code="java"]import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
...
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Inp...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mRBmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
2. Bitmap中的方法copyPixelsToBuffer
Bitmap b = ...
int bytes = b.getByteCount();
方法:public static byte[] intToBytes(int id) {
byte[] arr = new byte[4];
arr[0] = (byte) ((id >> 0 * 8) & 0xFF);
arr[1] = (byte) ((id >> 1 * 8) & 0xFF);
arr[2] = (
Android开发,从int数组到Bitmap ARGB_8888 导入失败的解决办法由wawal1原创,欢迎转载在做android开发-图像相关-opencv-jni调用过程中遇到的问题:Bitmap Img = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Img.setPixels(SrcInt, 0, w, 0, 0, w, h);这样写导致Img 全零