Android和JavaWeb通性跨平台之C的应用

汇川PLC和PLC之间ModebusTCP通讯 然后在全局变量中创建相应的变量关联IW和QW的寄存器创建全部变量//AM402作为主站——读H3U(D12-D21)//AM402作为主站——写给H3U(D200-D209)或者使用数组的方式。 阅读详情

Android和JavaWeb通性跨平台之C的应用

我们都知道Java是一门跨平台语言,能够跨平台的原因是虚拟机,根本原因是虚拟机是用C语言写的,大部分操作系统都支持C开发,是通过JNI Java调用C程序实现的。

 

跨平台C应用有三个核心的分别是:

一。图形 OpenGL

     常用的游戏引擎是通过JNI Java调用OpenGL   C 库来实现的,前提条件是操作系统本身支持OpenGL,从而实现跨平台。为了说明清楚,用以下代码来说明,以下是一个通过OpenGL   C代码来渲染的类,从#include<GLES2/gl2.h>可以看出调用系统的OpenGL库。

 

#ifndef NATIVEGL_DEMO2_GLINTERFACE_H
#define NATIVEGL_DEMO2_GLINTERFACE_H

#include <GLES2/gl2.h>
#include <EGL/egl.h>
#include <pthread.h>
#include <cstdlib>
#include <math.h>
#include <android/native_window.h>
#include <android/native_window_jni.h>
#include <unistd.h>
#include <sys/time.h>
#include <initializer_list>
#include <memory>
#include <memory.h>
#include <jni.h>


class RenderPara{

public:

    enum RenderThreadMessage {
        MSG_NONE = 0,
        MSG_WINDOW_SET,
        MSG_RENDER_LOOP_EXIT
    };
    pthread_t _threadId;
    pthread_mutex_t _mutex;
    enum RenderThreadMessage _msg;

    // android window, supported by NDK r5 and newer
    ANativeWindow* _window;

    EGLDisplay _display;
    EGLSurface _surface;
    EGLContext _context;

    EGLint _width;
    EGLint _height;
};

class GLRenderer {
private:
    RenderPara renderPara;

//    int start;
    bool Inited=0;
    bool running=0;
    bool window_seted=0;
public:
    /*
     * 下面的函数为GLRender类内置函数,用户不需要实现
     * 其中声明为virtual的函数用户程序可覆盖实现
     * */
    GLRenderer();
    ~GLRenderer();
    virtual GLuint loadShader(GLenum shaderType, const char* pSource);  //加载着色器脚本(用户可调用
    virtual GLuint createProgram(const char* pVertexSource, const char* pFragmentSource);   //创建OpenGL渲染工程(用户可调用
    virtual bool InitRender();  //初始化EGL
    virtual void DestroyRender();   //清除EGL
    static void * RenderThread(void *args); //OpenGL渲染线程入口
    virtual void RenderLoop();  //渲染线程主循环

    /*
     * 将OpenGL渲染的窗口关联到java空间的Surface对象。实现在SurfaceView上的绘图
     * @env:JNI方法传入的JNIEnv对象
     * @surface:Surface对象
     */
    virtual void SetWindow(JNIEnv *env, jobject surface);
    /*
     * 开启OpenGL渲染线程。第一次调用时创建渲染线程。
     * 之后调用只是继续运行调用StartRenderThread函数后停止的渲染线程,并不会重新开启一个渲染线程。
     * 也就是说,每个GLRenderer对象只能创建一个渲染线程
     * */
    virtual void StartRenderThread();
    /*
     * 停止渲染线程,并不会释放线程资源,只是停止线程运行。
     * 当再次调用StartRenderThread函数后,线程继续运行。
     * */
    virtual void StopRenderThread();

    /*
     * 下面三个函数为OpenGL渲染上下文回调函数,这三个函数需要用户通过继承GLRenderer类的方法来实现
     * 实现方法同android.opengl.GLSurfaceView.Render中的方法。详细请参考develop.google
     * */
    virtual void SurfaceCreate()=0;
    virtual void SurfaceChange(int width, int height)=0;
    virtual void DrawFrame()=0;
};



#endif //PHASEDARRAY2_0_GLINTERFACE_H

 

从以下代码我们可以看出是通过JNI 调用C实现跨平台:

 

import android.view.Surface;

public class JNIProxy {
    static {
        System.loadLibrary("native-lib");
    }
    //初始化函数
    public static native void CalPixel();
    //OpenGL函数--使用Native方案调用OpenGL使用下面6个函数
    public static native void StartRenderS();
    public static native void StopRenderS();
    public static native void SetSurfaceS(Surface surface);
}

 

 

二。图像 OpenCV

     OpenCV大部分代码是用C写的,包括算法,只有部分是用Java写的,也是一个跨平台的计算机视觉库。以下就是OpenCV用C写的库,通过JNI Java调用相应的库。

 

OpenCV模块结构:

  1. Core模块:定义基本的数据结构,包括重要的Mat和一些其他的核心部分。
  2. Imageproc模块:该模块包括线性和非线性的图像滤波,图像几何变换,颜色转换,直方图处理等等。
  3. Imagecodecs模块:图像的输入输出模块。
  4. Video模块:该模块是视频分析,包括运动估计,和背景分离,对象跟踪。
  5. Calib3d模块:基于多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相识算法,3D信息的重建。
  6. Features2d模块:显著特征检测,描述,特征匹配。
  7. Objdetect模块:物体检测和预定义好的分类器实例(比如:人脸,眼睛,面部,人,车等等)。
  8. HighGUI模块:视频捕捉,图像和视频编解码,图像交换界面。
  9. GPU模块:利用GPU对OpenCV模块进行加速算法。
  10. DNN模块:深度神经网络库。
  11. ML模块:机器学习模块(包括:svm,决策树,Boosting等算法封装)。
  12. Flann模块:快速最近邻搜索包(Fast_Library_for_Approximate_Nearest_Neighbors)的简称。它是一个对大数据集和高维特征进行最近邻搜索的算法的集合,而且这些算法都已经被优化过了。在面对大数据集是它的效果要好于BFMatcher。
  13. Legacy模块:一些已经废弃的代码库,保留下来做版本兼容。
  14. 其他模块:Google测试包,Python bingdings等等。
  15. 额外库模块opencv_contrib:参考博文:https://blog.youkuaiyun.com/zmdsjtu/article/details/80736258

以下来说说OpenCV的应用,它的应用与本篇博客联系不大,就一带而过,提一下:

OpenCV的应用有哪些呢:

  1. 二维与三维特征工具箱
  2. 运动估算
  3. 人脸识别
  4. 姿势识别
  5. 人机交互
  6. 运动识别
  7. 对象识别
  8. 对象检测
  9. 移动机器人
  10. 图像分割与识别
  11. 视频分析
  12. 运动跟踪
  13. 图像处理
  14. 机器学习
  15. 深度神经网络

三。音视频 FFmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它也是跨平台的,底层是用C写的,以下是相应的库,可以通过JNI java调用。

FFmpeg的模块结构:

  1. libavformat模块:用于各种音视频封装格式生成和解析。包括获取解码所需要信息,以生成解码上下文结构和读取音视频等功能。音视频格式解析协议,为libavcodec分析码流提供独立音频或视频码流源。
  2. libavcodec模块:用于各种类型声音/图像编解码。读库是音视频编解码的核心,实现了市面上大部分解码器的功能。
  3. libavdevice模块:用于硬件采集加速,显示,操作计算中常用的音视频捕捉和输出设备。
  4. libavfilter模块:用于音视频滤波器开发,比如:宽度比剪切,格式化和非格式化伸缩。
  5. libavutil模块:包括一些公共的工具函数的使用库,如算数运算和字符操作。
  6. libavresample模块:音视频封装解码格式预设等。
  7. libswscale模块:原始视频格式转换。
  8. libswresample模块:原始音频格式转换。
  9. libpostproc模块:用于音视频后期效果处理,比如:图像去块效应。

以下来说说FFmpeg的应用,它的应用与本篇博客联系不大,就一带而过,提一下:

FFmpeg的应用有哪些呢:

  1. 音视频剪切和拼接
  2. 音频混音
  3. 音频转码
  4. 音频,视频合成
  5. 音频抽取
  6. 音频解码播放
  7. 音频编码
  8. 视频抽取
  9. 视频剪切
  10. 视频转码
  11. 视频截图
  12. 视频转GIF动画
  13. 视频加水印
  14. 视频画面拼接
  15. 视频反序倒播
  16. 图片合成视频
  17. 视频解码播放
  18. 本地直播推流
  19. 实时直播推流
从零开始:在Ubuntu 22.04上配置Isaac Gym Preview 3环境(含常见错误解决方案) 本文提供了在Ubuntu 22.04系统上从零开始配置Isaac Gym Preview 3环境的完整实战指南。内容涵盖NVIDIA驱动安装、Conda环境搭建、CUDA与PyTorch版本精准匹配、Isaac Gym核心安装与验证,并重点介绍了针对四足机器人等复杂系统的强化学习训练环境配置、常见错误解决方案及性能调优技巧,旨在帮助开发者高效部署这一高性能物理仿真平台。 阅读详情

相关推荐

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 655

跨平台APP和web APP到底有什么区别?

跨平台app是什么?   所谓的跨平台app开发就是一套代码写完以后可以多端发布运行到各个平台,比如:iOS、安卓、web、百度直达号、360流应用、微信 JS SDK... web app是什么?        所谓的 web app就是给web站打了个包加了个壳,我们看起来像是一个app可以上传到应用商店,可以从上面下载,但是我们在手机上打开之后看到的实际上还是网

ddwendy的专栏 7475

Ubuntu20.04安装Torque-6.1.2单机版(踩坑篇)

说明:PBS排队系统原先是在Centos7安装使用很顺利,但是有客户需求在Ubuntu20.04上使用,着手在Ubuntu20.04安装上安装的时候发现很多报错,并不能顺利安装,网上查找到的教程,有的说是让放弃转slurm,有的是换源安装,但是安装好的版本很低,有许多bug,不是很好用。经过自己慢慢摸索之后,改了部分配置以及源码之后,能够顺利安装,再次记录一下踩坑心得,与大家一起分享学习。如有问题,欢迎大家来撩。...............

华青水上的博客 8087

"Java之所以能跨平台,本质原因在于jvm不是跨平台的"如何理解?

误区:JVM都不是跨平台的,JAVA依赖于JVM,那JAVA应该就不跨平台了啊 解释:先理解跨平台含义:不依赖于操作系统,也不依赖硬件环境。 不同的系统下有不同的JVM(JVM是C语言写的),所以JVM不是跨平台的,没毛病。 JAVA依赖于JVM,JVM给JAVA提供了运行环境,所以JAVA是跨平台的。 再重新理解这句...

Android唐浮的专栏 1万+

相机图像质量研究(15)常见问题总结:光学结构对成像的影响--暗角

老式相机的暗角往往比较明显,周围一圈能够明显感觉到亮度下降的很多,当然有些电源模仿手持相机的摄影效果,也能看到周围明显的亮度下降。一、

xiaoshixiu的专栏 1124

sid图像数据_遥感影像数据

影像数据基本概念影像数据是由卫星或飞机上的成像系统获得的影像,多为遥感影像数据。影像数据的每个像元都有一个值,表示传感器探测到像素对应地面面积上目标物的电磁辐射强度,也叫亮度值、灰度值。SuperMap支持的影像数据格式有:*.img、*.tif、*.tiff、*.bmp、*.jpg、*.png、*.gif、*.raw、*.sid等。计算机以二进制记录数据,所以其量化的等级以二进制来划分,即2n。...

weixin_39534395的博客 1626

编程语言十万个为什么之java web的基础概念

1.什么是JAVA Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。 2.什么是J2EE J2EE是一套全然不同于传统应用开发...

weixin_30333885的博客 177

ANSYS Fluent热边界条件避坑指南:为什么你的自然对流计算结果总出错?

本文深入剖析了在ANSYS Fluent中进行自然对流仿真时,导致计算结果出错或发散的核心原因与解决方案。重点解析了重力项与操作密度设置、Boussinesq与不可压缩理想气体模型的抉择、以及压力离散格式(推荐Body Force Weighted)这三大关键雷区,并结合电子机箱散热等实战案例,提供了一套稳定可靠的仿真设置流程与调试技巧。

weixin_28396629的博客 741

二,JavaWeb之Java的跨平台性

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33755649的博客 257

【YoloV11改进策略】基于流形约束超连接(mHC)增强YoloV11全局特征提取能力|独家复现|梁文峰署名论文

论文标题:流形约束超连接 (Manifold-Constrained Hyper-Connections, mHC)核心问题:针对超连接 (Hyper-Connections, HC) 扩展残差流宽度时破坏恒等映射、引发训练不稳定性和高内存开销的问题,提出一种约束性框架。目标:恢复残差连接的稳定性与可扩展性,同时保持HC的性能增益。基准模型:基于DeepSeek-V3的MoE架构,进行了3B、9B、27B模型的实验验证。论文图示mHC 是一个通用的HC扩展框架。

m0_47867638的博客 1349

《HiVT: Hierarchical Vector Transformer for Multi-Agent Motion Prediction》论文阅读之HiVT

目录摘要1.介绍2.相关工作3.方法3.1. 总体框架3.2 场景表示 3.3 分层向量Transformer3.3.1 局部编码器3.3.2 全局交互模块3.3.3 多模态未来解码器3.4 训练4.实验4.1 实验设置4.2 消融研究 4.3. 结果5.结论 准确预测周围交通参与者的未来运动对于自动驾驶车辆的安全至关重要。最近,矢量化方法由于能够捕捉交通场景中的复杂交互而在运动预测领域占据主导地位。然而,现有的方法忽略了问题的对称性并且受到昂贵的计算成本的影响,面临着在不牺牲预测性能的情况

Gavinmiaoc的博客 3340

c#跨平台移动开发_解释了使用C ++进行跨平台移动和Web开发

c#跨平台移动开发There is a good chance that if you are going to write complex software, you will need data storage and manipulation. We are lucky SQLite is there for us, with a small binary footprint, portab...

weixin_26638123的博客 443

vue-vben-admin 打包编译报错Failed to resolve entry for package “@vben-core/design“ 的解决方法

如果你在你是不是在 apps/子目录下执行了 build?# 项目根目录 pnpm build而不是在下面单独打包。这个问题本身不复杂,但非常容易被误导去“怀疑依赖、怀疑配置、怀疑人生”。实际上,只要理解vue-vben-admin 是 monorepo 架构,很多类似问题都会迎刃而解。如果你后面还遇到 vben-admin 的构建、部署、权限或性能相关问题,这一套思路都很有用。希望这篇记录,能帮你节省至少半小时的排坑时间。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 423

HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了...

    2007 年 W3C (万维网联盟)立项 HTML5,直至 2014 年 10 月底,这个长达八年的规范终于正式封稿。     过去这些年,HTML5 颠覆了 PC 互联网的格局,优化了移动互联网的体验,接下来,HTML5 将颠覆原生 App 世界。这听起来有点危言耸听,但若认真分析 HTML5 的发展史,你会发现,这个世界的发展趋势确实就是这样。     熟知历史才能预知未...

weixin_34224941的博客 937

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

推荐一个非常强大的跨平台的开发库!

热文推荐:尘埃落定!清华才子王垠加入华为职级22,前阿里P10赵海平加入字节跳动,职级或为4+百度网盘“破解版”,Pandownload开发者被抓简介TBOX是一个用c语言实现的跨平台开...

Java和Android架构 1207

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java能够跨平台的原因

1.什么是平台 平台就是cpu和操作系统的结合体。 2.实现机制 首先与平台无关的编译器将java编译为中间码,该中间码与平台无关,再经由对应的Java虚拟机(Java Virtual Machine,简称 JVM)将中间码(字节码)翻译为对应平台的机器语言进行编译。 JVM是一个软件,在不同平台有对应的不同版本。所以在不同平台上安装对应版本的JVM即可运行java程序。从而实现了”一次编译,到处...

paiyi9128的博客 1718

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java后端分布式架构结构图和脑图

Dubbo扩展组件: 大型网站技术架构: 大型网站架构设计: 基于服务架构: 微服务架构模式:

Frank浩的博客 1896

分布式架构利用开源框架之五大服务组件(Ngnix,Zookeeper,Dubbo,solr,MQ)

分布式架构利用开源框架之五大服务组件(Ngnix,Zookeeper,Dubbo,solr,MQ) ​​ 下图是一个分布式架构的案例,用这个案例来做下面的说明,服务组件是因为部署起来是一个服务。 第一大服务组件:Ngnix 用来做负载均衡或者反向代理 弟二大服务组件:Zookeeper 用来做注册中心服务,服务的注册与发现 第三大服务组件:Dubbo 用来做Rpc远程...

Frank浩的博客 1451

Java应用开发全栈工程师

Java应用开发全栈工程师 1.全栈工程师 全栈工程师大家可能都知道,就是包括web前端,web后端,手机应用开发都有了解,而且都可以上手做的工程师。 2.Java全栈工程师 Java全栈工程师一般情况指的是web前端,web后端都会,可以上手开发的工程师 3.Java应用全栈工程师。 Java应用全栈工程师一般指的是APP原生应用开发,web后端服务开发。 我为什么建议成为一...

Frank浩的博客 1364

分布式架构系统可用的开源中间件

分布式架构系统可用的开源中间件分析 在分析上面分布式架构之前,我们来扯一个话外题,知道分布式架构,都是从单机架构学习进行过来的,当然对单机架构都比较熟悉了,这时从知识面,应该可以看出,一般在没有一定用户量,和服务器最初开始架构,不会采取分布式,而采取单机架构模式,这样可以节省成本也可以后期迭代,在单机架构模式下的知识点,有两个重点,也是面试经常问到,监考的问题: 1.数据库索引(B+...

Frank浩的博客 1056

Android和Java通性之OpenCV(图像处理综合)

Android和Java通性之OpenCV(图像处理综合) OpenCV大部分代码是用C写的,包括算法,只有部分是用Java写的,也是一个跨平台的计算机视觉库。 在这篇博客主要是看Java实现的那部分,如果要实现比较特殊的,或者自己实现算法,就得用JNI Java调用C来实现。 当然大部分Java实现的算法也是通过调用C实现的,但是大部分C没有做Java封装。 Android OpenCV...

Frank浩的博客 1014

Java分布式模式重要的两个知识点(分布式缓存和高可用)

Java分布式模式下两个重要的知识点:分布式缓存和高可用 Java大型高性能服务采用分布式架构,其中分布式缓存是其中重要措施,有一种说法叫“缓存为王”,缓存是为了解决高并发,所以这个知识点也可以称为高并发,在这里我们就称为分布式缓存吧。 分布式缓存有几个概念: 磁盘缓存,也叫文件缓存(如:Ehcache,GuavaCache)常见于:CDN缓存,反向代理缓存 内存缓存(如:Memcache...

Frank浩的博客 903

Java分布式环境下高可用详细知识点

单机模式下是用一台机器完成所有的软件服务,当在分布式环境下就是用多台机器提供服务,多则高达几百,上千。 解决高可用的方式是集群,集群可用通过主从热备,或者多台集群,可以做到只要至少有两台机器存活,就可以 时时提供服务。 在这种环境 高可用 就有自己的概念和知识,列举一下: 负载均衡 隔离 限流 降级 超时 回滚 压测 (以后分点做详细介绍,以上是个人一点分享,没有贬义,看是...

Frank浩的博客 851

Java大数据结构图和脑图

Spark MLlib机器学习库: spark mllib算法解析: 大数据Storm实时分析: 大数据层次结构: 大数据流程结构图: 大数据日志分析步骤架构: 大数据Hadoop生态组件: 机器学习体系: Java物联网架构结构图: 物联网架构层次: ...

Frank浩的博客 829
上一篇: 分布式中三个基本(存储,集群和RPC)
下一篇: 用信息的思维谈谈对目前web方向是人工智能的应用
Frank浩
博客等级 码龄15年 4粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Frank浩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值