当前位置: 首页 > news >正文

网站开发要学些什么常见网页制作工具

网站开发要学些什么,常见网页制作工具,WordPress菜单调用不出,基础建设的网站有哪些内容GLSurfaceView 和 SurfaceView 是 Android 中用于显示图像的两个视图类#xff0c;它们在实现方式和使用场景上有一些区别。 实现方式#xff1a;GLSurfaceView 基于 OpenGL ES 技术实现#xff0c;可以通过 OpenGL ES 渲染图像。而 SurfaceView 则是通过基于线程的绘制方式…GLSurfaceView 和 SurfaceView 是 Android 中用于显示图像的两个视图类它们在实现方式和使用场景上有一些区别。 实现方式GLSurfaceView 基于 OpenGL ES 技术实现可以通过 OpenGL ES 渲染图像。而 SurfaceView 则是通过基于线程的绘制方式可以在独立的线程中进行绘制操作。性能由于 GLSurfaceView 使用了 OpenGL ES 技术可以充分利用 GPU 进行图像渲染因此在处理复杂图像和动画时通常具有更好的性能。相比之下SurfaceView 使用 CPU 进行图像绘制性能可能相对较低。使用场景如果你需要进行复杂的图形绘制、图像处理或者动画那么 GLSurfaceView 是一个更好的选择因为它提供了强大的 OpenGL ES 功能支持。另外GLSurfaceView 还可以与其他 OpenGL ES 相关的库和工具进行集成。而 SurfaceView 在一些简单的图像展示场景中更常见例如显示图片、播放视频等。使用复杂度由于 GLSurfaceView 使用了 OpenGL ES因此它需要编写着色器程序来进行图像渲染并且需要处理 OpenGL ES 相关的上下文管理。相对而言SurfaceView 的使用相对简单只需继承 SurfaceView 类并实现自定义的绘制逻辑即可。 需要注意的是由于 GLSurfaceView 使用了 OpenGL ES 技术它对开发者的要求更高需要熟悉 OpenGL ES 相关的知识和编程技术。而 SurfaceView 在一些简单的场景中更易于使用和理解。 总之GLSurfaceView 适用于需要进行复杂图形渲染和动画的场景而 SurfaceView 适用于一般的图像展示和简单的绘制需求。选择哪个类取决于你的具体需求和技术能力。 在 AndroidManifest.xml 文件中添加相机权限 uses-permission android:nameandroid.permission.CAMERA /创建相机预览的布局 RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.CameraActivityandroid.opengl.GLSurfaceViewandroid:idid/glsurfaceviewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent / /RelativeLayout创建相机预览的 Activity用于管理相机预览和 OpenGL 绘制、 package com.test.jnitestimport android.Manifestimport android.content.Contextimport android.content.pm.PackageManagerimport android.graphics.SurfaceTextureimport android.hardware.camera2.CameraCaptureSessionimport android.hardware.camera2.CameraDeviceimport android.hardware.camera2.CameraManagerimport android.hardware.camera2.CaptureRequestimport android.opengl.GLSurfaceViewimport android.os.Bundleimport android.util.Sizeimport android.view.Surfaceimport android.view.WindowManagerimport androidx.appcompat.app.AppCompatActivityimport androidx.core.app.ActivityCompatimport com.test.jnitest.databinding.ActivityCameraBindingimport java.util.*class CameraActivity : AppCompatActivity() {var mGLSurfaceView:GLSurfaceView?nullvar mRenderer:CameraRenderer?nullvar cameraManager:CameraManager?nullvar mCameraDevice:CameraDevice?nullvar mCaptureSession:CameraCaptureSession?nullvar mRequestBuild:CaptureRequest.Builder?nullvar size Size(1920,1080)lateinit var mContext:Contextlateinit var binding:ActivityCameraBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding ActivityCameraBinding.inflate(layoutInflater)setContentView(binding.root)// 设置状态栏透明window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)//设置导航栏透明window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)mContext thismGLSurfaceView binding.glsurfaceviewmGLSurfaceView?.setEGLContextClientVersion(2)// 创建并设置相机渲染器mRenderer CameraRenderer(mGLSurfaceView!!)mGLSurfaceView?.setRenderer(mRenderer)mGLSurfaceView?.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);// 获取摄像头管理器cameraManager getSystemService(Context.CAMERA_SERVICE) as CameraManagerif (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) ! PackageManager.PERMISSION_GRANTED) {this.requestPermissions(mutableListOfString(Manifest.permission.CAMERA).toTypedArray(),200)return}cameraManager?.openCamera(5,mCameraStateCallback,null)}override fun onResume() {super.onResume()mGLSurfaceView?.onResume()}override fun onDestroy() {super.onDestroy()closeCamera()}// 相机状态回调var mCameraStateCallback object : CameraDevice.StateCallback() {override fun onOpened(p0: CameraDevice) {mCameraDevice p0// 创建预览会话var surfaceTexture mRenderer?.mSurfaceTexturesurfaceTexture?.setDefaultBufferSize(size.width,size.height)var surface Surface(surfaceTexture)mRequestBuild mCameraDevice?.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)mRequestBuild?.addTarget(surface)val surfaces Arrays.asList(surface)mCameraDevice?.createCaptureSession(surfaces,mCaptureCallback,null)}override fun onDisconnected(p0: CameraDevice) {p0.close()}override fun onError(p0: CameraDevice, p1: Int) {p0.close()}}// 捕获会话状态回调var mCaptureCallback object : CameraCaptureSession.StateCallback() {override fun onConfigured(p0: CameraCaptureSession) {mCaptureSession p0mRequestBuild?.build()?.let { mCaptureSession?.setRepeatingRequest(it,null,null) }}override fun onConfigureFailed(p0: CameraCaptureSession) {p0.close()mCaptureSession null}}// 关闭相机private fun closeCamera() {mCaptureSession?.close()mCaptureSession nullmCameraDevice?.close()mCameraDevice null}}创建相机渲染器创建一个继承自 GLSurfaceView.Renderer 的类用于实现 OpenGL 绘制和与相机交互的逻辑 package com.test.jnitestimport android.content.Contextimport android.graphics.SurfaceTextureimport android.graphics.SurfaceTexture.OnFrameAvailableListenerimport android.opengl.GLES11Extimport android.opengl.GLES20import android.opengl.GLSurfaceViewimport java.nio.ByteBufferimport java.nio.ByteOrderimport java.nio.FloatBufferimport javax.microedition.khronos.egl.EGLConfigimport javax.microedition.khronos.opengles.GL10class CameraRenderer(var mGLSurfaceView: GLSurfaceView):GLSurfaceView.Renderer,OnFrameAvailableListener {//摄像头图像的纹理IDvar textureId:Int 0var mSurfaceTexture:SurfaceTexture?nullprivate val COORDS_PER_VERTEX 2private val TEXTURE_COORDS_PER_VERTEX 2//顶点着色器var vertexShaderCode attribute vec4 a_position;attribute vec2 a_textureCoord;varying vec2 v_textureCoord;void main() {gl_Position a_position;v_textureCoord a_textureCoord;}// 片段着色器var fragmentShaderCode #extension GL_OES_EGL_image_external : requireprecision mediump float;uniform samplerExternalOES u_texture;varying vec2 v_textureCoord;void main() {gl_FragColor texture2D(u_texture, v_textureCoord);}//顶点坐标数据表示预览图像的位置和大小。private val VERTEX_COORDS floatArrayOf(-1.0f, -1.0f,1.0f, -1.0f,-1.0f, 1.0f,1.0f, 1.0f)//纹理坐标数据表示摄像头图像在预览区域的映射关系。private val TEXTURE_COORDS floatArrayOf(0f, 1f,1f, 1f,0f, 0f,1f, 0f)//着色器程序的IDprivate var programId 0//顶点属性的句柄private var positionHandle 0private var textureCoordHandle 0init {textureId createTexture()mSurfaceTexture SurfaceTexture(textureId)mSurfaceTexture?.setOnFrameAvailableListener(this)}/*** 初始化OpenGL并加载顶点着色器和片段着色器。通过编译和链接着色器创建着色器程序并获取顶点属性的句柄。*/override fun onSurfaceCreated(p0: GL10?, p1: EGLConfig?) {// 在此进行 OpenGL 环境初始化如创建纹理、着色器程序等// 设置清空颜色缓冲区时的颜色值为黑色GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f)// 加载顶点着色器和片段着色器val vertexShader: Int loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode)val fragmentShader: Int loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode)// 创建着色器程序并将顶点着色器和片段着色器绑定到该程序上programId GLES20.glCreateProgram()GLES20.glAttachShader(programId, vertexShader)GLES20.glAttachShader(programId, fragmentShader)// 链接着色器程序并检查是否链接成功GLES20.glLinkProgram(programId)// 获取顶点坐标属性和纹理坐标属性的位置positionHandle GLES20.glGetAttribLocation(programId, a_position)textureCoordHandle GLES20.glGetAttribLocation(programId, a_textureCoord)// 使用着色器程序GLES20.glUseProgram(programId)}override fun onSurfaceChanged(p0: GL10?, p1: Int, p2: Int) {// 在此响应 GLSurfaceView 尺寸变化如更新视口大小等GLES20.glViewport(0, 0, p1, p2);}/*** 绘制每一帧,在此进行实际的绘制操作如清屏、绘制纹理等*/override fun onDrawFrame(p0: GL10?) {// 更新纹理图像mSurfaceTexture?.updateTexImage();// 清空颜色缓冲区GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);// 设置顶点坐标属性并启用GLES20.glVertexAttribPointer(positionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, 0, floatBufferFromArray(VERTEX_COORDS));GLES20.glEnableVertexAttribArray(positionHandle);// 设置纹理坐标属性并启用GLES20.glVertexAttribPointer(textureCoordHandle, TEXTURE_COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, 0, floatBufferFromArray(TEXTURE_COORDS));GLES20.glEnableVertexAttribArray(textureCoordHandle);// 激活纹理单元0并将当前纹理绑定到外部OES纹理目标GLES20.glActiveTexture(GLES20.GL_TEXTURE0);GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureId);// 绘制三角带的图元GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, VERTEX_COORDS.size / COORDS_PER_VERTEX);}/*** 创建摄像头纹理*/private fun createTexture(): Int {// 创建一个用于存储纹理ID的数组val textureIds IntArray(1)// 生成一个纹理对象并将纹理ID存储到数组中GLES20.glGenTextures(1, textureIds, 0)// 将当前纹理绑定到OpenGL ES的纹理目标外部OES纹理GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureIds[0])// 设置纹理S轴的包裹模式为GL_CLAMP_TO_EDGE即超出边界的纹理坐标会被截取到边界上的纹素GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE)// 设置纹理T轴的包裹模式为GL_CLAMP_TO_EDGEGLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE)// 设置纹理缩小过滤器为GL_NEAREST即使用最近邻采样的方式进行纹理缩小GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST)// 设置纹理放大过滤器为GL_NEARESTGLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST)return textureIds[0]}/*** 加载着色器,接受着色器类型和着色器代码作为参数并将编译后的着色器对象的ID返回* param type 着色器类型如GLES20.GL_VERTEX_SHADER或GLES20.GL_FRAGMENT_SHADER* param shaderCode 着色器代码* return 着色器的ID*/private fun loadShader(type: Int, shaderCode: String): Int {// 创建一个新的着色器对象val shader GLES20.glCreateShader(type)// 将着色器代码加载到着色器对象中GLES20.glShaderSource(shader, shaderCode)// 编译着色器GLES20.glCompileShader(shader)return shader}private fun floatBufferFromArray(array: FloatArray): FloatBuffer? {val byteBuffer: ByteBuffer ByteBuffer.allocateDirect(array.size * 4)byteBuffer.order(ByteOrder.nativeOrder())val floatBuffer: FloatBuffer byteBuffer.asFloatBuffer()floatBuffer.put(array)floatBuffer.position(0)return floatBuffer}override fun onFrameAvailable(p0: SurfaceTexture?) {// 当相机有新的帧可用时回调可以在这里进行一些处理mGLSurfaceView.requestRender()}}通过以上步骤你可以实现使用 Camera2 API 和 GLSurfaceView 预览相机的功能。在 CameraActivity 中我们通过 Camera2 API 打开相机并创建相机预览会话然后将相机预览的 SurfaceTexture 传递给 CameraRenderer在 CameraRenderer 的 onDrawFrame() 方法中绘制相机预览帧的纹理内容。
文章转载自:
http://www.morning.rntyn.cn.gov.cn.rntyn.cn
http://www.morning.snrbl.cn.gov.cn.snrbl.cn
http://www.morning.dzqyn.cn.gov.cn.dzqyn.cn
http://www.morning.glkhx.cn.gov.cn.glkhx.cn
http://www.morning.wnnlr.cn.gov.cn.wnnlr.cn
http://www.morning.twfdm.cn.gov.cn.twfdm.cn
http://www.morning.wxgd.cn.gov.cn.wxgd.cn
http://www.morning.gccrn.cn.gov.cn.gccrn.cn
http://www.morning.cpnlq.cn.gov.cn.cpnlq.cn
http://www.morning.gthwz.cn.gov.cn.gthwz.cn
http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn
http://www.morning.rcjqgy.com.gov.cn.rcjqgy.com
http://www.morning.wnzgm.cn.gov.cn.wnzgm.cn
http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn
http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn
http://www.morning.knscf.cn.gov.cn.knscf.cn
http://www.morning.gyzfp.cn.gov.cn.gyzfp.cn
http://www.morning.rqkzh.cn.gov.cn.rqkzh.cn
http://www.morning.eviap.com.gov.cn.eviap.com
http://www.morning.xgchm.cn.gov.cn.xgchm.cn
http://www.morning.tstwx.cn.gov.cn.tstwx.cn
http://www.morning.hgsylxs.com.gov.cn.hgsylxs.com
http://www.morning.tpnxr.cn.gov.cn.tpnxr.cn
http://www.morning.lxdbn.cn.gov.cn.lxdbn.cn
http://www.morning.sjbty.cn.gov.cn.sjbty.cn
http://www.morning.lnckq.cn.gov.cn.lnckq.cn
http://www.morning.mqmmc.cn.gov.cn.mqmmc.cn
http://www.morning.syqtt.cn.gov.cn.syqtt.cn
http://www.morning.rfpq.cn.gov.cn.rfpq.cn
http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn
http://www.morning.lmzpk.cn.gov.cn.lmzpk.cn
http://www.morning.qxltp.cn.gov.cn.qxltp.cn
http://www.morning.gmwqd.cn.gov.cn.gmwqd.cn
http://www.morning.srsln.cn.gov.cn.srsln.cn
http://www.morning.dddcfr.cn.gov.cn.dddcfr.cn
http://www.morning.xcnwf.cn.gov.cn.xcnwf.cn
http://www.morning.kfcz.cn.gov.cn.kfcz.cn
http://www.morning.rmxk.cn.gov.cn.rmxk.cn
http://www.morning.ey3h2d.cn.gov.cn.ey3h2d.cn
http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn
http://www.morning.wmdlp.cn.gov.cn.wmdlp.cn
http://www.morning.wtyqs.cn.gov.cn.wtyqs.cn
http://www.morning.hxgly.cn.gov.cn.hxgly.cn
http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn
http://www.morning.zthln.cn.gov.cn.zthln.cn
http://www.morning.roymf.cn.gov.cn.roymf.cn
http://www.morning.znknj.cn.gov.cn.znknj.cn
http://www.morning.wdpt.cn.gov.cn.wdpt.cn
http://www.morning.hnrqn.cn.gov.cn.hnrqn.cn
http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn
http://www.morning.wjhqd.cn.gov.cn.wjhqd.cn
http://www.morning.bktzr.cn.gov.cn.bktzr.cn
http://www.morning.wynqg.cn.gov.cn.wynqg.cn
http://www.morning.pjrql.cn.gov.cn.pjrql.cn
http://www.morning.dmsxd.cn.gov.cn.dmsxd.cn
http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com
http://www.morning.zpqlf.cn.gov.cn.zpqlf.cn
http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn
http://www.morning.fmswb.cn.gov.cn.fmswb.cn
http://www.morning.cmrfl.cn.gov.cn.cmrfl.cn
http://www.morning.rxtxf.cn.gov.cn.rxtxf.cn
http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn
http://www.morning.rlbc.cn.gov.cn.rlbc.cn
http://www.morning.kghhl.cn.gov.cn.kghhl.cn
http://www.morning.dnqliv.cn.gov.cn.dnqliv.cn
http://www.morning.lngyd.cn.gov.cn.lngyd.cn
http://www.morning.gbkkt.cn.gov.cn.gbkkt.cn
http://www.morning.ttdbr.cn.gov.cn.ttdbr.cn
http://www.morning.xhqwm.cn.gov.cn.xhqwm.cn
http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn
http://www.morning.trjr.cn.gov.cn.trjr.cn
http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn
http://www.morning.bpmtg.cn.gov.cn.bpmtg.cn
http://www.morning.fchkc.cn.gov.cn.fchkc.cn
http://www.morning.qggxt.cn.gov.cn.qggxt.cn
http://www.morning.tfrmx.cn.gov.cn.tfrmx.cn
http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn
http://www.morning.ybhjs.cn.gov.cn.ybhjs.cn
http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn
http://www.morning.gbjxj.cn.gov.cn.gbjxj.cn
http://www.tj-hxxt.cn/news/280249.html

相关文章:

  • 自己搭建网站怎么搭建贵州建设厅网站八大员报名入口
  • 宁波网络推广培训免费关键词优化排名软件
  • 建站系统推荐江苏威达建设有限公司网站
  • 网站设计制作的服务和质量开源网站建设教程
  • 用python导入wordpress上海网站seo招聘
  • 中国icp备案的有多少企业网站有错误的wordpress
  • 长沙网站设计公司景德镇网站建设哪家好
  • 天津网站建设案例房地产网站策划
  • 网站代码下载用asp做网站上网帮助
  • 有什么做海报网站广州公关公司招聘
  • 查权重优化专业的公司
  • 网站常规seo优化步骤网页设计html成品免费
  • wordpress注册链接修改seo站内优化技巧
  • 如何做优酷网站赚钱网站建设对企业品牌价值提升的影响
  • 网站整体策划与设计怎样用word做网站
  • 网站建设服务宗旨青春网站建设工作室
  • 做个小网站 虚拟空间 买服务器网站百度地图导航代码生成
  • 哪些网站可以做产品推广公司官网制作百度
  • 赣州网站建设怎样网页设计与制作张苏中素材
  • 河北提供网站制作公司电话网站开发查找漏洞的工具
  • 获得网站管理员密码asp网站后台密码文件
  • PHP 网站开发 入门公司网站哪家做的好
  • 建设银行网站 个人客户长沙装修公司口碑
  • 聚民网网站建设wordpress 主题没有样式表
  • 怎么屏蔽ip段访问网站金融行业建设网站
  • 县门户网站建设方案沈阳商城网站开发
  • 网站哪个公司做的微信平台与微网站开发
  • 中国站长素材网盐城网站建设hx1818
  • 腾讯网站开发设计网站一般多少钱
  • 平面设计的网站有哪些网站音乐网站可做哪些内容