Mono.Android Bitmap Argb8888实际顺序验证

  • 在进行Xamarin开发时,因需要用到RGBA格式,而Mono.Android.Bitmap.Config中只有Argb8888。
  • Argb8888按照字面意思好像是按照A、R、G、B顺序排列像素通道,但是在查阅了网上一些模糊的说法后,我发现并没有那么简单。
  • 有一篇Android/Java开发博客中验证了在java库中Argb8888格式的ARGB顺序为R、G、B、A,而Mono for Android API又是映射标准的Andriod API(如下所示),理论上来说两者的Argb8888格式应该是相同的。
ARGB_8888
Added in API level 1
enum val ARGB_8888 : Bitmap.Config
Each pixel is stored on 4 bytes. Each channel (RGB and alpha for translucency) is stored with 
8 bits of precision (256 possible values.) This configuration is very flexible and offers the
best quality. It should be used whenever possible.
Use this formula to pack into 32 bits:
int color = (A & 0xff) << 24 | (B & 0xff) << 16 | (G & 0xff) << 8 | (R & 0xff);
  • 但是俗话说眼见为实,因此我决定再去验证一下Mono.Android Bitmap Argb8888的实际顺序,项目步骤如下
    (1)创建一个带Android平台的Xamarin.Forms项目;
    (2)在xaml文件中添加一个Button组件,这里命名为“btnARGBTest”,为其创建一个名为“btnARGBTest_Clicked”的点击事件;
    (3)在点击事件中添加下列代码,调试结果如代码中的注释所示
    注:每当点击Button时,Debug.WriteLine()方法就会在输出信息框里输出相应信息。
        private void btnARGBTest_Clicked(object sender, EventArgs e)
        {
			Bitmap bmpARGB =  Bitmap.CreateBitmap(3, 3, Bitmap.Config.Argb8888);
            bmpARGB.SetPixel(0, 0, Android.Graphics.Color.Red);
            bmpARGB.SetPixel(0, 1, Android.Graphics.Color.Green);
            bmpARGB.SetPixel(0, 2, Android.Graphics.Color.Blue);
            Debug.WriteLine("Red:{0}", bmpARGB.GetColor(0,0));
            //输出-Red:Color(1.0, 0.0, 0.0, 1.0, sRGB IEC61966-2.1)
            Debug.WriteLine("Green:{0}", bmpARGB.GetColor(0, 1));
            //输出-Green:Color(0.0, 1.0, 0.0, 1.0, sRGB IEC61966-2.1)
            Debug.WriteLine("Blue:{0}", bmpARGB.GetColor(0, 2));
            //输出-Blue:Color(0.0, 0.0, 1.0, 1.0, sRGB IEC61966-2.1)
            
            //注:猜测这里A应该是默认成不透明,所以归一化值为1.0
        }

最后结果列表如下所示,故可得出ARGB8888格式顺序为RGBA

------R	G B	A
--Red:1	0 0	1
Green:0	1 0	1
-Blue:0 0 1	1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luis L.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值