OpenCV:16.封装 java 层 sdk 模型

具体代码请看:NDKPractice项目的opencv64

小的需求:优化下Bitmap加载图片的源码(严格控制下内存)

1. 苏宁体育面试题讲解(一面)

  • HashMap 的实现,如何判断超出了原存储空间,超出了如何扩容,如果存入 key 相同,值如何存入。(之前手写过)
  • 你所了解的设计模式,谈谈你对工厂设计模式的理解,单例设计模式如何避免内存泄露
  • 事件分发机制
  • 二叉树找最大
  • Activity 的启动模式,几种模式具体的应用。
  • 静态方法存储在哪儿,堆和栈的垃圾回收机制

面试考两点:1.基础牢不牢 2.能不能搞定目前的项目

2. NDK 学到什么程度

c/c++ 少不了,基础,进阶,linux内核,shell脚本,cmake语法
opencv,ffmpeg
android开发:c/c++工程师开发(精通),java 工程师(精通),native 和 java 层互通 NDK 开发(熟悉c/c++,熟悉android)

  • 知道:有这么个东西,模糊
  • 熟悉:知道这个东西,讲明白,项目中也能直接用上
  • 精通:知道这个东西,讲明白,项目中也能直接用,知道原理(四种启动模式,怎么解析,怎么压栈弹栈,声明周期怎么调用)

读:第三方的源码,opencv,ffmpeg,openGL,android native.
写:那么多套路

部门:引擎部门(.so库,java的sdk)有专门的 c/c++ 工程师,android 应用层开发

3.如何封装 java 层 sdk 模型

假设我对一张图片做操作

  • 掩膜操作
  • 模糊操作
  • 又来一个关于 filter2D 的操作

规则考虑周到

  • 细节拆分
  • 尽量不要改 native 层的代码,可以改 java 层的(针对上面的需求可以把 filter2D 方法提到 java 层
  • 思考:时间空间复杂度

4.动手封装OpenCV的Mat.java 对象

filter2D -> Mat

Java层的Mat.java 对应 native 层的 Mat.cpp

Java层写 Mat.java -> Bitmap.java, Bitmap.java -> Mat.java

5.NDK异常处理需要注意的地方

在前面有篇博客讲过 NDK 中的异常处理

6.java和C++的回收机制

java的 GC 会调用 finalize 方法。

c 中需要自己回收

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%