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

Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#)

  • Baumer工业相机
  • Baumer工业相机BGAPISDK和图像放大缩小的技术背景
  • Baumer工业相机通过BGAPISDK将相机图像图像放大缩小功能
    • 1.引用合适的类文件
    • 2.通过BGAPISDK将相机图像图像放大缩小功能
  • Baumer工业相机将相机图像放大缩小显示的优势
  • Baumer工业相机将相机图像放大缩小显示的行业应用

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。

Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

Baumer工业相机BGAPISDK和图像放大缩小的技术背景

Baumer工业相机的BGAPI SDK是Baumer公司开发的针对其相机产品系列的一套软件开发工具包。该SDK提供了一组API,使开发人员可以编写专业应用程序,从而控制、捕获、处理和显示Baumer相机的图像和数据。BGAPI SDK支持多种编程语言,包括C++、C#、Visual Basic、LabVIEW、Matlab等,并提供了大量示例代码和文档,以帮助用户轻松上手,快速完成应用程序的开发。

BGAPI SDK提供了丰富的功能,可以控制Baumer相机的所有参数,包括曝光时间、增益、白平衡、触发模式等,以及支持各种数据格式,例如Raw、BMP、JPG等,同时还提供了实时显示、数据采集、图像处理等功能,为开发人员提供了高度定制化的解决方案。此外,BGAPI SDK还支持多相机系统的开发,并可支持各种计算机操作系统,如Windows、Linux、Mac OS等。

可以通过使用工业相机的软件开发工具包(SDK)来放大和缩小图像以及显示它们。这通常涉及使用SDK中的函数或方法来访问相机的图像帧,并将其传递给一个显示器控件或绘图区域。

本文介绍的使用BGAPI SDK将相机图像相机图像图像放大缩小的功能。

Baumer工业相机通过BGAPISDK将相机图像图像放大缩小功能

下面介绍在C#里Baumer工业相机如何通过BGAPISDK将相机图像图像放大缩小的方式

1.引用合适的类文件

代码如下(示例):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Data;
using System.Globalization;
using System.Diagnostics;
using System.IO;

2.通过BGAPISDK将相机图像图像放大缩小功能

Baumer工业相机将相机图像图像放大缩小功能核心代码如下所示:

SystemList 
Open a System 
Get the InterfaceList and fill it Open an Interface 
private void mPictureBox_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{Bitmap bmptodraw = null;//Bitmap cdbmptodraw = null;//Bitmap chbmptodraw = null;Rectangle bitmap_complete = new Rectangle(); //rectangle over all bitmapsRectangle src_complete = new Rectangle();Rectangle dest_complete = new Rectangle();double ratioW = 1.0f;double ratioH = 1.0f;Rectangle bitmap_image = new Rectangle();//Rectangle bitmap_dist = new Rectangle();//Rectangle bitmap_header = new Rectangle();Point pictureboxlocation = new Point();Rectangle src_image = new Rectangle();//Rectangle src_header = new Rectangle();//Rectangle src_dist = new Rectangle();Rectangle dest_image = new Rectangle();//Rectangle dest_header = new Rectangle();//Rectangle dest_dist = new Rectangle();//int ret = 0;//SizeF header_size = new SizeF();int idx = -1;Size destbmp = new Size(1, 1);if (mbNewImageReady == true){mbDrawFirstBitmap = !mbDrawFirstBitmap;mbFlipDrawImage = true;}mbNewImageReady = false;if (mbDrawFirstBitmap){idx = 0;if (mImageData[0].bgapiImage == null)return;bmptodraw = mImageData[0].bmp;}else{idx = 1;if (mImageData[1].bgapiImage == null)return;bmptodraw = mImageData[1].bmp;}if (!mShowImage)return;if (mShowImage){//destbmp.Width += bmptodraw.Width;//destbmp.Height += bmptodraw.Height;bitmap_complete.Width += bmptodraw.Width;bitmap_complete.Height = Math.Max(bitmap_complete.Height, bmptodraw.Height);}//calculate the destination rectangle of the several data blocksint nwx = 0;if (mShowImage){bitmap_image.X = nwx;bitmap_image.Y = 0;bitmap_image.Width = bmptodraw.Width;bitmap_image.Height = bmptodraw.Height;nwx += bmptodraw.Width;}else{if (!bitmap_image.IsEmpty)bitmap_image.X = bitmap_image.Y = bitmap_image.Width = bitmap_image.Height = 0;}//adjust pictureBox size if (mSizeMode == PictureBoxSizeMode.Normal){this.pictureBox1.Width = bitmap_complete.Width;this.pictureBox1.Height = bitmap_complete.Height;this.panel1.AutoScroll = true;}else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){ratioW = (double)bitmap_complete.Width / (double)panel1.Width;ratioH = (double)bitmap_complete.Height / (double)panel1.Height;if (ratioW > ratioH){this.pictureBox1.Height = (int)((double)bitmap_complete.Height / ratioW);this.pictureBox1.Width = panel1.Width;}else{this.pictureBox1.Width = (int)((double)bitmap_complete.Width / ratioH);this.pictureBox1.Height = panel1.Height;}this.panel1.AutoScroll = false;}else{//--1this.pictureBox1.Width = Convert.ToInt32(bitmap_complete.Width * ZOOMFACTOR);this.pictureBox1.Height = Convert.ToInt32(bitmap_complete.Height * ZOOMFACTOR);this.panel1.AutoScroll = true;}}else{if (bitmap_complete.Width > panel1.Width)this.pictureBox1.Width = panel1.Width;elsethis.pictureBox1.Width = bitmap_complete.Width;if (bitmap_complete.Height > panel1.Height)this.pictureBox1.Height = panel1.Height;elsethis.pictureBox1.Height = bitmap_complete.Height;this.panel1.AutoScroll = false;}//adjust picture box locationif (mSizeMode == PictureBoxSizeMode.Normal)pictureboxlocation = new Point(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){if (ratioW > ratioH){pictureboxlocation.X = 0;pictureboxlocation.Y = (int)(panel1.Height / 2) - (int)(this.pictureBox1.Height / 2);}else{pictureboxlocation.X = (int)(panel1.Width / 2) - (int)(this.pictureBox1.Width / 2);pictureboxlocation.Y = 0;}}else//--1pictureboxlocation = new Point(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);}else //center image{if (bitmap_complete.Width > panel1.Width)pictureboxlocation.X = 0;elsepictureboxlocation.X = (int)(panel1.Width / 2) - (int)(bitmap_complete.Width / 2);if (bitmap_complete.Height > panel1.Height)pictureboxlocation.Y = 0;elsepictureboxlocation.Y = (int)(panel1.Height / 2) - (int)(bitmap_complete.Height / 2);}//calculate source rectanglesif (mSizeMode == PictureBoxSizeMode.Normal){src_complete.X = 0;src_complete.Y = 0;src_complete.Width = bitmap_complete.Width;src_complete.Height = bitmap_complete.Height;src_image = new Rectangle(0, 0, bitmap_image.Width, bitmap_image.Height);}else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){src_complete.X = 0;src_complete.Y = 0;src_complete.Width = bitmap_complete.Width;src_complete.Height = bitmap_complete.Height;src_image = new Rectangle(0, 0, bitmap_image.Width, bitmap_image.Height);}else{src_complete.X = 0;src_complete.Y = 0;src_complete.Width = bitmap_complete.Width;src_complete.Height = bitmap_complete.Height;src_image = new Rectangle(0, 0, bitmap_image.Width, bitmap_image.Height);}}else{if (bitmap_complete.Width > panel1.Width)src_complete.X = (int)(bitmap_complete.Width / 2) - (int)(panel1.Width / 2);elsesrc_complete.X = 0;src_complete.Width = this.panel1.Width;if (bitmap_complete.Height > panel1.Height)src_complete.Y = (int)(bitmap_complete.Height / 2) - (int)(panel1.Height / 2);elsesrc_complete.Y = 0;src_complete.Height = this.pictureBox1.Height;src_image = src_complete;src_image.Intersect(bitmap_image);src_image.X -= bitmap_image.X;src_image.Y -= bitmap_image.Y;}//calculate destination rectanglesif (mSizeMode == PictureBoxSizeMode.Normal){dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = bitmap_complete.Width;dest_complete.Height = bitmap_complete.Height;dest_image = bitmap_image;}else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = this.pictureBox1.Width;dest_complete.Height = this.pictureBox1.Height;dest_image.X = this.pictureBox1.Width * bitmap_image.Left / src_complete.Width;dest_image.Y = this.pictureBox1.Height * bitmap_image.Top / src_complete.Height;dest_image.Width = this.pictureBox1.Width * bitmap_image.Width / src_complete.Width;dest_image.Height = this.pictureBox1.Height * bitmap_image.Height / src_complete.Height;}else{dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = this.pictureBox1.Width;dest_complete.Height = this.pictureBox1.Height;dest_image.X = (int)(bitmap_image.X * ZOOMFACTOR);dest_image.Y = (int)(bitmap_image.Y * ZOOMFACTOR);dest_image.Width = (int)(bitmap_image.Width * ZOOMFACTOR);dest_image.Height = (int)(bitmap_image.Height * ZOOMFACTOR);}}else{dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = this.pictureBox1.Width;dest_complete.Height = this.pictureBox1.Height;dest_image = src_complete;dest_image.Intersect(bitmap_image);dest_image.Offset(src_complete.X * (-1), src_complete.Y * (-1));}this.pictureBox1.Location = pictureboxlocation;try{if (mShowImage){e.Graphics.DrawImage(bmptodraw,dest_image,src_image.Left,src_image.Top,src_image.Width,src_image.Height,GraphicsUnit.Pixel);}}catch{System.Windows.Forms.MessageBox.Show("Exception while refresh image window");}
}
private void DrawingTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{lock (mImageData){if (mbNewImageAvailable)//1{if (mbNewImageReady == false)//2{if (mbDrawFirstBitmap == true)//3{if (mImageData[1].bgapiImage != null)//4{lock (mCamera.BackImagesColl)mCamera.BackImagesColl.Add(mImageData[1].bgapiImage);}mImageData[1].bgapiImage = mNewBgapiImage;CreateBitmap(ref mImageData[1].bgapiImage, ref mImageData[1].bmp, BGAPI.BGAPI_ChunkId.BGAPI_CHUNKID_IMAGE);}else//3 --mbDrawFirstBitmap == false{if (mImageData[0].bgapiImage != null)//--4{//transformation presetlock (mCamera.BackImagesColl)mCamera.BackImagesColl.Add(mImageData[0].bgapiImage);}mImageData[0].bgapiImage = mNewBgapiImage;CreateBitmap(ref mImageData[0].bgapiImage, ref mImageData[0].bmp, BGAPI.BGAPI_ChunkId.BGAPI_CHUNKID_IMAGE);}mbNewImageAvailable = false;mbNewImageReady = true;pictureBox1.Invalidate(pictureBox1.ClientRectangle, false);}}}
}

Baumer工业相机将相机图像放大缩小显示的优势

提高图像细节:通过放大的图像,您可以看到更多的细节,帮助您更好地分析和理解图像。

方便捕获处理:放大图像可以使需要测量或分析的目标更易于捕获并进行后续处理,提高了工作效率。

减少错误率:当需要进行目标定位或测量时,放大图像可以帮助您减少错误率,提高测量的精度。

对于设备来说更加灵活:随着工艺和设备的不断改进,相机调整成为会更加灵活,可以根据需要调整图像大小和显示比例。

更好的用户体验:放大缩小图像可以提供更好的用户体验,使用户更容易观察图像细节,并且更容易理解和分析图像。

Baumer工业相机将相机图像放大缩小显示的行业应用

制造业:在制造业中,工业相机通常用于检查和测量零件的尺寸、形状和表面质量。工业相机的放大缩小功能可以帮助操作员更好地观察图像,提高生产效率。

医疗行业:在医疗行业中,工业相机可以用于拍摄骨骼、血管或其他器官的图像。放大缩小功能可以使医生更好地观察和分析这些图像,并帮助他们作出更好的诊断。

. 食品行:在食品行业中,工业相机可以用于检查食品的质量和安全性。放大缩小功能可以使操作员更好地观察食品的细节并检查有无缺陷。

运输和安保:在运输和安保中,工业相机可以用于识别车辆和个人。放大缩小功能可以帮助识别和跟踪目标更加准确和快速。

环境监测:工业相机可以用于环境监测如气象、污染物。放大缩小功能可以帮助检测和分析图片中存在的环境问题,如污染物分布区域。

相关文章:

Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#) Baumer工业相机Baumer工业相机BGAPISDK和图像放大缩小的技术背景Baumer工业相机通过BGAPISDK将相机图像图像放大缩小功能1.引用合适的类文件2.通过BGAPISDK将相机图像图像放大缩小功能…...

8.1 PowerBI系列之DAX函数专题-进阶-解决列排序对计算的影响

需求 下列矩阵中,在月份列不按照原始数据的month_no排列时,能正确计算销售额占比,但是当月份按照month_no排序时就会出错,需要解决这个问题。 实现 month % divide([amount],calculate([amount],all(date[month desc]))) //排…...

Java的第十二篇文章——集合

目录 第十二章 集合 学习目标 1. 集合框架的由来 2. 集合框架的继承体系 3. Collection接口 3.1 Collection接口的常用方法 4. Iterator接口 4.1 Iterator接口的抽象方法 4.2 获取迭代器接口实现类 4.3 迭代器的实现原理 4.4 并发修改异常 4.5 集合存储自定义对象并…...

docker 镜像制作 与 CI/CD

目录 镜像到底是什么? 使用docker创建镜像 步骤: 1、编辑Dockerfile(Dockerfile是docker制作镜像的配方文件) 2、编辑requirements.txt文件 3、编辑app.py文件,我们的程序文件 4、生成镜像文件 5、查看生成的镜…...

Spring Boot 异常报告器解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解Spring Boot 属性配置解析Spring Boot 属性加载原理解析Spring Boot 异常报告器解析 创建自定…...

瑞亚太空活动公司RSA与英国国防与安全加速器达成量子项目合作

​ (图片来源:网络) 瑞亚太空活动公司(RSA)与英国国防与安全加速器(DASA)签署了合作协议,主要开发名为“无限交换”的可操纵量子真空的技术项目。这是RSA在英国签订的第一份合同&…...

Shapley值法介绍及实例计算

Shapley值法介绍及实例计算 为解决多个局中人在合作过程中因利益分配而产生矛盾的问题,属于合作博弈领域。应用 Shapley 值的一大优势是按照成员对联盟的边际贡献率将利益进行分配,即成员 i 所分得的利益等于该成员为他所参与联盟创造的边际利益的平均值…...

不用手动改 package.json 的版本号

“为什么package.json 里的版本还是原来的,有没有更新?”,这个时候我意识到,我们完全没有必要在每次发布的时候还特意去关注这个仓库的版本号,只要在发布打tag的时候同步一下即可 node.js 部分,我们得有一个…...

gitlab Can‘t update,dev has no tracked branch

代码仓库迁移到gitlab后本地更改仓库地址后 拉取代码报错: Can’t update,dev has no tracked branch: 解决办法: 在当前项目的目录下运行命令: git branch -u git dev --set-upstream-toorigin/dev第一个dev是本地分支名字&…...

sql批量操作

SQl: 1,在某一字段后批量增加内容:UPDATE 表名 SET 字段 CONCAT(字段,要增加的内容) 例:UPDATE b8_niuniu_permission SET game_ids CONCAT(game_ids,,3) (或者后面可以加where条件) 2,批量修改某一字段…...

数据库监控与调优【九】—— 索引数据结构

索引数据结构-B-Tree索引、Hash索引、空间索引、全文索引 二叉树查找 对于相同深度的节点,左侧的节点总是比右侧的节点小。在搜索时,如果要搜索的值key大于根节点(图中6),就会在右侧子树里查找;key小于根…...

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理哈工大计算机网络课程传输层协议详解之:TCP协议哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析 …...

Unity Mac最新打苹果包流程

作者介绍:铸梦xy。IT公司技术合伙人,IT高级讲师,资深Unity架构师,铸梦之路系列课程创始人。 IOS详细打包流程1.申请APPID2.申请开发证书3.创建描述文件 IOS详细打包流程 1.申请AppID 2.创建证书 3.申请配置文件(又名描…...

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言: explain: 语法: 总结: 前言: 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具:SQL执行频率,慢日志查询,profile。但是这三个方法也只是在时间角度粗略的…...

学Python能做哪些副业?我一般不告诉别人!建议存好

前两天一个朋友找到我吐槽,说工资一发交完房租水电,啥也不剩,搞不懂朋友圈里那些天天吃喝玩乐的同龄人钱都是哪来的?确实如此,刚毕业的大学生工资起薪都很低,在高消费、高租金的城市,别说存钱&a…...

简化 Hello World:Java 新写法要来了

OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。 这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” ,希望 Java 的学习过程能更平滑,让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释:现在的 Java 语言非常…...

【服务器】springboot实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

浅谈常见的加密算法及实现

浅谈常见的加密算法及实现 简介: 随着公司业务的发展,系统用户量日益增多,系统安全性问题一直在脑子里反复回旋,以前系统用户少影响面小,安全方面也一直没有进行思考和加固,现如今业务发展了,虽…...

FTP协议详解

简介 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协…...

网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言

目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA 特性 4、PHP 作用 PHP 能做什么? 5、C/C 使用 如何学习 前面的话 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML,JS那些基础知识,磨刀不误砍柴…...

八大排序算法之归并排序(递归实现+非递归实现)

目录 一.归并排序的基本思想 归并排序算法思想(排升序为例) 二.两个有序子序列(同一个数组中)的归并(排升序) 两个有序序列归并操作代码: 三.归并排序的递归实现 递归归并排序的实现:(后序遍历递归) 递归函数抽象分析: 四.非递归归并排序的实现 1.非递归归并排序算法…...

基于SpringBoot+Html的前后端分离的学习平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 在知识大爆炸的现代,怎…...

MySQL实战解析底层---“order by“是怎么工作的

目录 前言 全字段排序 rowid排序 全字段排序 VS rowid排序 前言 在开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求以举例市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓…...

Linux和Shell:开源力量与命令行之美

目录 一、概述二、Linux的简单介绍三、Shell的简单介绍四、Linux和Shell的应用领域五、Shell编程结语: 一、概述 Linux和Shell是开源世界中不可或缺的两个重要组成部分。Linux作为一种自由和开放的操作系统,以其稳定性、安全性和可定制性而备受推崇。而S…...

服务负载均衡Ribbon

服务负载均衡Ribbon Ribbon 介绍Ribbon 案例Ribbon 负载均衡策略Ribbon 负载均衡算法设置自定义负载均衡算法 Ribbon 介绍 Ribbon 是一个的客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。它不像 Spring Cloud 服务注册中心、配置中心、API 网关那样独立部署…...

hibernate vilidator主要使用注解的方式对bean进行校验

hibernate vilidator主要使用注解的方式对bean进行校验,初步的例子如下所示: package com.learn.validate.domain; import javax.validation.constraints.Min; import org.hibernate.validator.constraints.NotBlank; public class Student { //在需要校…...

华为HCIP第一天---------RSTP

一、介绍 1、以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路,但是这也带来了网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题,导致用户通信质量差,甚至通信中断。为了解决交换网…...

Jmeter(二) - 从入门到精通 - 创建测试计划(Test Plan)(详解教程)

1.简介 上一篇文章已经教你把JMeter的测试环境搭建起来了,那么这一篇我们就将JMeter启动起来,一睹其芳容,首先我给大家介绍一下如何来创建一个测试计划(Test Plan)。 2.创建一个测试计划(Test Plan&#x…...

Autosar诊断实战系列06-详解Dem中Event的NvM存储

本文框架 前言1. Dem触发NvM存储的基本流程2. Dem触发NvM存储的layout格式及内容2.1 Event在NvM中的layout格式2.2 Event在NvM中的存储内容2.3 Dem中Event与DTC的存储关系3.组合式Event(多个Event对应一个DTC)的存储处理3.1 仅分配一个Memory Entry3.2 检索方式3.3 一对一方式前…...

04 todoList案例

React全家桶 一、案例- TODO List 综合案例 功能描述 动态显示初始列表添加一个 todo删除一个 todo反选一个 todotodo 的全部数量和完成数量全选/全不选 todo删除完成的 todo 1.1 静态组件构建 将资料包中的todos_page/index.html中核心代码添加到Todo.jsx文件中,…...