Android JNI 中通过接收Bitmap对象获取像素,十万火急!!!!!

liuwanmeng liuwanmeng 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

typedef struct {
uint8_t alpha;
uint8_t red;
uint8_t green;
uint8_t blue;
} argb;

//参数srcbit 和 dstbit都是从android端传过来的Bitmap对象。下面的这个函数可以实现图片的灰度化处理
//dstbit在android端已经给其分配了空间,但里面没有像素值,灰度化处理后的像素值保存在dstbit里面,然后供android端调用
//AndroidBitmap_getInfo()和AndroidBitmap_lockPixels()都是bitmap.h这个头文件中提供的函数
JNIEXPORT void JNICALL Java_com_example_imagehandle_MainActivity_expand
(JNIEnv * env, jobject obj, jobject srcbit, jobject dstbit)
{
AndroidBitmapInfo srcinfo;
void* srcpixels;
AndroidBitmapInfo dstinfo;
void* dstpixels;
int ret;
int y;
int x;

if ((ret = AndroidBitmap_getInfo(env, srcbit, &srcinfo)) < 0) {
LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret);
return;
}

if ((ret = AndroidBitmap_getInfo(env, dstbit, &dstinfo)) < 0) {
LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret);
return;
}

if (srcinfo.format != ANDROID_BITMAP_FORMAT_RGBA_8888) {
LOGE("Source Bitmap format is not RGBA_8888 !");
return;
}

if (dstinfo.format != ANDROID_BITMAP_FORMAT_A_8) {
LOGE("destination Bitmap format is not alpha_8 !");
return;
}

if ((ret = AndroidBitmap_lockPixels(env, srcbit, &srcpixels)) < 0) {
LOGE("Src Bitmap LockPixels Failed ret=%d!", ret);
return;
}

if ((ret = AndroidBitmap_lockPixels(env, dstbit, &dstpixels)) < 0) {
LOGE("Dst Bitmap LockPixels Failed ret=%d!", ret);
return;
}

for (y = 0; y < srcinfo.height; y++) {
argb * line = (argb *) srcpixels;
uint8_t * dstline = (uint8_t *) dstpixels;
for (x = 0; x < srcinfo.width; x++) {
dstline[x] = 0.3 * line[x].red + 0.59 * line[x].green
+ 0.11 * line[x].blue;
}

srcpixels = (char *) srcpixels + srcinfo.stride;
dstpixels = (char *) dstpixels + dstinfo.stride;
}

AndroidBitmap_unlockPixels(env, srcbit);
AndroidBitmap_unlockPixels(env, dstbit);

}

我想知道,直接用上面的这种方式,要怎么获取某个坐标的像素点的值,因为我要进行图像放大,实现插值算法,必须能够通过坐标获得某个像素点的值,求各位大神指教,分不多了。。。
...全文

相关推荐

Android中利用C++处理Bitmap对象的实现方法

下面小编就为大家带来一篇Android中利用C++处理Bitmap对象的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

NEDL001

Android JNI图像处理经典例子

通过JNI试用C语言对图像进行处理,灰度化,二值化,求边缘等。对Android开发人员很有帮助,值得参考。

metapipe

Android JNI处理图片实现黑白滤镜的方法

主要介绍了Android JNI处理图片实现黑白滤镜的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38679233

android 点击图片通过jni在底层处理,然后在屏幕上显示

通过一个按钮,选择一张图片,通过jni 将图片信息传到底层,然后将处理后的数据传回安卓层,手写通用版的Android.mk ,让你迅速搭建一个工程测试你的底层代码,一个积分,绝对值得。

LIZhang2016

利用OPENCV为android开发畸变校正的JNI库方法

需要为项目提供一套畸变校正的算法,由于需要大量的矩阵运算,考虑到效率和适时性,使用JNI开发,希望把有关数组短阵的处理的变换全部放入C语言中处理。 主要用于android移动端,大致的数据来源一是从camera直接读取YUV数据,一种是从第三方接读取RGB数据,另一种是直接对BITMAP进行处理。 1.考虑到硬件设备接口,第三方软件接口,图像接口,OPENCV接口,希望能够开发出通用的算法库,一劳永逸的解决各种复杂的使用场景,因此数据要支持YUV,支持ARGB,支持MAT 2android对BITMAP有获取像素点的操作,也有通过象素点生成BITMAP的操作,而且有很多图像处理接口和第三方可以

weixin_38692631
评论 3
收藏 已收藏
分享
返回顶部
liuwanmeng
Android 80,490 成员 91,375 内容