如何用Qt打开Android图像库

        本文讲述如何用Qt和AndroidJava混合代码打开Android默认图像库。如果你从事图像处理工作的话,该文档相当有用。例如,用imread函数打开一幅OpenCV Mat图像或者写一些图片浏览程序。很遗憾,Qt还没有默认提供这项功能,所以我想把它分享给大家。


在此,我假设你已经聚币如下条件:

    *你已经成功在你的电脑上安装了Qt(带Android环境)

    *你有一台Android手机或者模拟器来跑Qt Android程序

#功能

本工程示例可以打开Android图库中的图片并显示到QLabel widget上。下面的截屏显示了Qt工程调用QtAndroidGallery,在后面的代码部分贴出了技术细节。



注意:本工程(源码)同样可以用于我前面写的一篇文章《如何用Qt(C++)和Android混合编程》

工程做了什么?

简单涵盖了Qt(C++)和Android(Java)通过JNI(Java Native Interface)代码的交互

详解:

下面我讲解释部分代码片段,可能会有点儿绕,如果您有关于本项目任何疑问或者遇到任何相关构建或运行问题请在讨论区提问讨论。



本方法用来抽取在图像库中选择的文件名。注意,下列JNI接口代码名的抽取样式非常重要。域名、报名、Java类名和方法名都必须用“_”隔开,如下所示。

JNIEXPORT void JNICALL
Java_com_amin_QtAndroidGallery_QtAndroidGallery_fileSelected(JNIEnv */*env*/,
jobject /*obj*/,
jstring results)
{
selectedFileName = QAndroidJniObject(results).toString();
}



本段代码用来调用Java代码中的静态方法。“openAnImage”是带一个参数的Java方法,返回选择的文件名。

QAndroidJniObject::callStaticMethod
   
   
    
    (“com/amin/QtAndroidGallery/QtAndroidGallery”,
“openAnImage”,
“()V”);
   
   

我们不深入到Java代码的细节中去,但是很多时候我发现在网上很多人难以理解如何调从一个内部的静态方法中用一个非静态方法。其实很简单!首先像这样在方法内部创建一个相同的类的实例(示例代码中已经有了)

private static QtAndroidGallery m_instance;
public QtAndroidGallery()
{
m_instance = this;
}

然后,插入那个静态方法,用你创建的类的实例调用非静态方法!

static void openAnImage()
{
m_instance.dispatchOpenGallery();
}

我不会讨论“dispatchOpenGallery”方法的细节,因为都是些纯Android代码,你只需要简单的使用Android SDK文档来获取相关的更多信息。


                                                                                                                                                                                                                                                                        


你可以从这里下载示例代码的源程序。包含了程序运行所有需要的文件,只要你正确配置了Qt的Android开发环境就好了。

本文翻译自http://amin-ahmadi.com/2015/12/08/how-to-open-android-image-gallery-in-qt/

请大家尊重作者的版权


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值