Bitmap.Config ARGB_8888

 
最近学习Api文档,打开Android.graphics.Bitmap类里有一个内部类Bitmap.Config类,在Bitmap类里createBitmap(int width, int height, Bitmap.Config config)方法里会用到,打开个这个类一看

枚举变量
public static final Bitmap.Config  ALPHA_8
public static final Bitmap.Config  ARGB_4444 
public static final Bitmap.Config  ARGB_8888
public static final Bitmap.Config  RGB_565

一看,有点蒙了,ALPHA_8, ARGB_4444,ARGB_8888,RGB_565 到底是什么呢?

其实这都是色彩的存储方法:我们知道ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue,其实所有的可见色都是右红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值

说白了就ALPHA_8就是Alpha由8位组成
ARGB_4444就是由4个4位组成即16位,
ARGB_8888就是由4个8位组成即32位,
RGB_565就是R为5位,G为6位,B为5位共16位

由此可见:
ALPHA_8        代表8位Alpha位图
ARGB_4444      代表16位ARGB位图
ARGB_8888     代表32位ARGB位图
RGB_565         代表8位RGB位图

位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真


本文出自 “皓月繁星” 博客,请务必保留此出处http://lovewf.blog.51cto.com/1723922/674236

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将安卓开发中的 Bitmap.Config.ARGB_4444 格式的位图传递给C++,您需要将该位图转换为C++中的图像格式,并使用OpenCV库在C++中显示该图像。下面是一个简单的示例代码,用于将ARGB_4444图像转换为OpenCV中的Mat格式: ``` // 将Android Bitmap转换为OpenCV Mat cv::Mat bitmapToMat(JNIEnv* env, jobject bitmap) { AndroidBitmapInfo info; void* pixels = 0; cv::Mat dst; try { CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0); CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 || info.format == ANDROID_BITMAP_FORMAT_RGB_565 || info.format == ANDROID_BITMAP_FORMAT_RGBA_4444); CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0); CV_Assert(pixels); dst.create(info.height, info.width, CV_8UC4); if (info.format == ANDROID_BITMAP_FORMAT_RGBA_8888) { cv::Mat tmp(info.height, info.width, CV_8UC4, pixels); tmp.copyTo(dst); } else if (info.format == ANDROID_BITMAP_FORMAT_RGB_565) { cv::Mat tmp(info.height, info.width, CV_8UC2, pixels); cvtColor(tmp, dst, cv::COLOR_BGR5652RGBA); } else if (info.format == ANDROID_BITMAP_FORMAT_RGBA_4444) { cv::Mat tmp(info.height, info.width, CV_8UC2, pixels); cvtColor(tmp, dst, cv::COLOR_BGRA4444_RGBA); } } catch (const cv::Exception& e) { AndroidBitmap_unlockPixels(env, bitmap); jclass je = env->FindClass("org/opencv/core/CvException"); if (!je) je = env->FindClass("java/lang/Exception"); env->ThrowNew(je, e.what()); return dst; } AndroidBitmap_unlockPixels(env, bitmap); return dst; } // 在C++中显示OpenCV Mat void showMat(cv::Mat& mat) { cv::imshow("Image", mat); cv::waitKey(0); } ``` 在您的C++代码中,您可以将ARGB_4444位图转换为OpenCV Mat,然后使用 showMat 函数在窗口中显示它: ``` jobject bitmap = ... // 获取ARGB_4444格式的Bitmap对象 cv::Mat mat = bitmapToMat(env, bitmap); showMat(mat); ``` 请注意,您需要在C++中包含以下头文件才能使用这些函数: ``` #include <jni.h> #include <android/bitmap.h> #include <opencv2/opencv.hpp> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值