基本介绍
思路:
一
首先需要一张,这里由于我的强迫症,我没有写死,而是去图库选择一张照片。
二
获取的宽、高,为了精度,这里一定要设置BitmapFactoryOptions,通过坐标的形式来获取RGB值,也就是说把一张通过坐标分为若干个小点。
上代码:
private Bitmap comp(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();
imagecompress(BitmapCompressFormatJPEG, 100, baos);
if (baostoByteArray()length / 1024 > 1024) {
//判断如果大于1M,进行压缩避免在生成(BitmapFactorydecodeStream)时溢出
baosreset();//重置baos即清空baos
imagecompress(BitmapCompressFormatJPEG, 50, baos);
//这里压缩50%,把压缩后的数据存放到baos中
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baostoByteArray());
BitmapFactoryOptions newOpts = new BitmapFactoryOptions();
//开始读入,此时把optionsinJustDecodeBounds 设回true了
newOptsinJustDecodeBounds = true;
Bitmap bitmap = BitmapFactorydecodeStream(isBm, null, newOpts);
newOptsinJustDecodeBounds = false;
int w = newOptsoutWidth;
int h = newOptsoutHeight;
//现在主流手机比较多是800500分辨率,所以高和宽我们设置为
float hh = 800f;//这里设置高度为800f
float ww = 500f;//这里设置宽度为500f
//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = 1;//be=1表示不缩放
if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
be = (int) (newOptsoutWidth / ww);
} else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
be = (int) (newOptsoutHeight / hh);
}
if (be <= 0)
be = 1;
newOptsinSampleSize = be;//设置缩放比例
//重新读入,注意此时已经把optionsinJustDecodeBounds 设回false了
isBm = new ByteArrayInputStream(baostoByteArray());
bitmap = BitmapFactorydecodeStream(isBm, null, newOpts);
return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
}
重点:一定要设置BitmapFactoryOptions newOpts = new BitmapFactoryOptions();否则坐标获取不准确
三
通过getPixel(x, y)方法通过坐标拿到我们需要的色值即可,比较简单。
iv_imagesetOnTouchListener(new OnTouchListener() {@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) eventgetX();
int y = (int) eventgetY();
if (eventgetAction() == MotionEventACTION_UP) {
int color = bitmapgetPixel(x, y);
// 如果你想做的更细致的话 可以把颜色值的R G B 拿到做响应的处理
int r = Colorred(color);
int g = Colorgreen(color);
int b = Colorblue(color);
int a = Coloralpha(color);
Logi(TAG, "r=" + r + ",g=" + g + ",b=" + b);
tv_rgbsetText("a=" + a + ",r=" + r + ",g=" + g + ",b="
+ b);
btnColorsetTextColor(Colorrgb(r, g, b));
}
return true;
}
});
COLORREF clr = ::GetPixel(hDC, pointx, pointy); //获取当前鼠标点像素值
m_red = GetRValue(clr);
m_bluee = GetBValue(clr);
m_green = GetBValue(clr);
以上就是关于android 怎样获取图像触摸位置的rgb值全部的内容,包括:android 怎样获取图像触摸位置的rgb值、如何用c++编程实现提取给定图像中任意一点的RGB颜色值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)