精华内容
下载资源
问答
  • 病例报告:经过几妇科检查后,名患有FGM / C的23岁索马里妇女因慢性阴蒂疼痛和浅表轻度泛滥而被转诊。 她的阴蒂被发现夹在切开的阴蒂引擎盖的疤痕下。 我们通过手术溶解了疤痕并重建了包皮。 在两个月的随访...
  • 用C#实现JPEG解码听起来也许怪怪的,因为比起C++或者芯片解码来说确实他的解码速度有点慢...超大的图片不能一次性加载内存里处理,因为对于65535px65535px这种极端的分辨率一次完整加载需要的内存就要达到6553565535

    用C#实现JPEG解码器听起来也许怪怪的,因为比起C++或者芯片解码来说确实他的解码速度有点慢了。之所以用C#实现JPEG解码器是因为业务上需要对超大的分辨率(垂直或水平分辨率接近65535像素)的JPEG图片进行瓦片切割,并对切割图片做额外的处理,需要用到窗体编程索性就一起用C#实现了。开始找到一个工具,名字好像叫DeepZoom,处理常见分辨率的图片没问题,但是分辨率大了就卡死了,也不支持个性化处理。超大的图片不能一次性加载内存里处理,因为对于65535px×65535px这种极端的分辨率一次完整加载需要的内存就要达到65535×65535×3/1024/1024/1024=11.99963379185647G,即使1/4大小的图像也要接近3G的内存,伤不起啊!基于DeepZoom遇到的问题,遂决定采取分段解码的策略,也就是读取一定字节的JPEG文件到内存进行解码,然后继续这样的操作直到解码完成,下面详细谈谈这个过程。

    先来回顾下JPEG标准里的顺序离散余弦编码图像解码的概要,JPEG图像编码的最小单元叫MCU,其实就是8×8的小块图片,JPEG的压缩算法就是压缩一个又一个MCU,顺序是从左到右,从上到下。压缩算法产出的数据是以位(Bit)存放的,所以一个字节内的8位就可能包含相邻像素里的数据,导致部分解码过程必须是瀑布式的走到底,也就是从文件解析数据位Bit只能在一个线程里,这样我们就无法用多线程来解析数据。从代码角度来讲,解析数据其实就是构造哈夫曼树,对哈夫曼树进行一次编码查询后获取到权重,然后查找权重表得到某个数据单元DU的数据位数N。程序目前运行到这里只能在一个线程运行, 因为从哪个字节哪个位取数据取决于前一步读取了多少位,所以多线程在这里使不上劲。 随后的流程大致是下面六个步骤:
    1,读取N位后对数据做交直流信号处理;
    2,反量化;
    3,反Zig-zag编码;
    4,反离散余弦变换;
    5,YCrCb颜色空间转为RGB;
    6,用RGB格式的MCU构建位图。
    这六个步骤就不详细展开了,在我放出的源码里可以找到相关代码。前面说解码只能在一个线程里,但是这六个步骤可以单独放进一个线程,因为前一个MCU解码的六个步骤不会影响本次MCU解码的六个步骤。

    学习完解码流程就可以考虑图片瓦片切割的问题了。假设我们有一张分辨率为25600×5000的jpg图片,一般瓦片的宽高为256像素的正方形图片,那么切割后的瓦片横向上有100个,垂直方向20个,其中水平方向上的最后一排瓦片大部分是空白图片。从解码过程我们知道,序列式离散余弦编码的JPEG图像是以8×8的MCU为最小编码单元,所以我们解码出来的图像是许多8×8像素的小块图像从左往右排列的。可以想象,水平方向一次完整解码出来的是25600×8分辨率的,而我们的瓦片是256×256的分辨率,我们要将这25600×8的图像切割成100份分别贴到水平方向的100个瓦片画布上。那么需要进行几次完整的水平方向的解码就能覆盖到一行完整的100个瓦片呢,显然是256/8=32次。重复上面的过程直到整个图像解码完毕,但这里有个问题,就是图像的高度可能不是瓦片高度的整数倍,所以最后一行瓦片图片的下面一部分是空白的,就需要用颜色或纹理图片去填充了。

    第一次对大图的解码切割出来的瓦片组成的网格相当于地图的最高分辨率,为了能实现类似地图的缩放就要不同级别的缩小版。下一级的缩小瓦片在整体上相当与原始大图宽高的1/2面积则为1/4,具体到一个瓦片T的话,他的分辨率仍然是256×256,但是他的内容就等于4个上一级瓦片的内容,也就是将上一级水平方向相邻的两个瓦片AB和AB下面两个瓦片分别缩小1/4贴到瓦片T上对应的位置。下面每一级瓦片的生成方法重复上述过程,每一级都是在上一级的基础上缩小1/4。

    下面的工具使用了JPEG解码器核心算法实现的图像查看和瓦片裁剪功能。

    最后要说的就是,瓦片切割出来用什么组件来展示呢?我采用的方案是js地图组件-LeafLet。

    JPEG解码器的核心算法下载地址

    解码器+图片显示+瓦片切割+LeafLet展示完全方案

    展开全文
  • 由定时任务跑批的数据往往使用列表直接一次性查询出来,在程序刚上线的时候可能没有问题,但是随着业务的增长我们发现原来的列表查询可能会导致内存溢出的情况。那么此时就需要考虑使用分页将原来的查询使用分页进行...

            

            在使用mybatis列表查询时存在大数据量内存溢出的风险,这里实现了在不改变代码逻辑的情况下将查询做分页切割。点击下载资源


           由定时任务跑批的数据往往使用列表直接一次性查询出来,在程序刚上线的时候可能没有问题,但是随着业务的增长我们发现原来的列表查询可能会导致内存溢出的情况。那么此时就需要考虑使用分页将原来的查询使用分页进行切割。


           大家第一个想到的就是改代码,我的想法是定义一个mybatis拦截器,拦截部分mapper方法名。返回一个自定义的继承于java.util.List的PrePageList , 这个PrePageList在调用mapper的方法时返回,此时PrePageList内部是没有数据的,在后续代码中调用增强for循环时PrePageList会自动去分页查询数据。
           

           同样的查询语句:


            

    ------------------------------------------------------------------------------------------------------------------------------


    在分页切割之前是这样的:


    ..........



    ------------------------------------------------------------------------------------------------------------------------------


    在使用分页切割之后是这样的:


    ......

      


    使用说明:

    1.  点击下载资源,解压,这里直接是一个maven工程,需要install

    2.  install之后,需要配置mybatis拦截器如:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
    		<!-- 全局映射器启用缓存 -->
    		<setting name="cacheEnabled" value="true" />
    		<!-- 数据库超过60秒仍未响应则超时 -->
    		<setting name="defaultStatementTimeout" value="600" />
    		
    		<setting name="jdbcTypeForNull" value="NULL"/>  
    	</settings>
    	
    	<plugins>
    		<plugin interceptor="com.bqjr.core.util.prepage.PrePagePlugin">
    			<property name="dialect" value="mysql"/>
    			<property name="pageSize" value="3" />
    			<!-- 意思是以PrePage结尾的mapper方法名走分页切割框架 -->
    			<property name="pageSqlId" value=".*PrePage"/>
    		</plugin>
    	</plugins>
    	
    </configuration>

         3.定义mapper接口(以PrePage结尾),接口在xml中的实现和正常编码一致:

    public interface BusinessContractInnerMapper {
    	List<BusinessContractInner> getContractListPrePage(@Param("start")Date startTime, @Param("end")Date endTime,@Param("creditIdList")List<String> creditIdList);
    
    	List<BusinessContractInner> getContractList1PrePage(QueryParamDTO queryParamDTO);
    
    	List<BusinessContractInner> getContractList3PrePage(Map<String, Object> map);
    	
    	List<BusinessContractInner> getContractList5PrePage();
    }

       4.调用时使用增强for循环遍历List做处理(不支持使用下标遍历):


    	@Test
    	public void queryContract4(){
    		try {
    			//2.执行业务
    			List<BusinessContractInner> contractInners = bciMapper.getContractList5PrePage();
    			printResult(contractInners);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	private void printResult(List<BusinessContractInner> contractInners) {
    		int i = 1;
    		//open()
    		for (BusinessContractInner inner : contractInners) {
    			//也可以做写入文件等操作
    			System.out.println(i+++"发送mq"+inner.getContractno());
    		}
    		//close()
    	}


           内存分析



             可以看到在读取数据的过程中,整个内存随时间得推移,使用呈现锯齿状态。符合预期

           原理解释




    展开全文
  • 因为一个无线收发模块缓存比较小,发指令可以,一次性发大量二进制文件会丢包,但是发完一小包等几毫秒由可以正常发下一包(应该是缓存区通过判断间隔时间进行了清空),这样就需要一个把大量文件切割然后按着规定...

    因为一个无线收发模块缓存器比较小,发指令可以,一次性发大量二进制文件会丢包,但是发完一小包等几毫秒由可以正常发下一包(应该是缓存区通过判断间隔时间进行了清空),这样就需要一个把大量文件切割然后按着规定间隔时间依次发送的小上位机工具,找了半天,没找到,自己用Qt写了个,在原来串口调试基础上更改而来(可见前期博客)

    以下是核心代码(别人写的,我就是集成应用,感谢互联网),其它的有机会上传

    void MainWindow::transmitDataFun (int cnt)             //发送文件
    {
    
        qint16 temp = 0;            //剩余待传数据
        qint16 FileSendEndFg;
    
    
        QFile *binFile = new QFile(fileLocation);
        binFile->open (QIODevice::ReadOnly);
        binFile->seek (cnt * 256);
    
        qDebug()<<"正在第"<<cnt+1<<"次发送数据给单片机"<<endl;
        ui->loadButton->setEnabled (false);
    
        char * binByte = new char[256];//bin缓存
        memset (binByte, 0xff, 256);
    
        QByteArray binTransmit;
        binTransmit.resize (0);
    
        temp = binSize - 256*cnt;
        qDebug()<<"剩余文件大小:"<<temp<<endl;
        if(temp < 256)
        {
            if(temp>0)//数据大于0
            {
    
                binFile->read (binByte, temp);
                binTransmit.insert(0, binByte, 256);
    
            }
            ui->loadProgressBar->setValue (100);
            ui->pushButton->setEnabled (true);
            FileSendEndFg=1;
        }
        else
        {
            binFile->read (binByte, 256);
            binTransmit.insert(0, binByte, 256);
    
            int i = (1 - float(temp) / float(binSize)) * 100;
            ui->loadProgressBar->setValue (i);
            FileSendEndFg=0;
        }
    
        delete binByte;
        if(temp>0)//数据大于0
          {
             p_Com->myCom->write(binTransmit);//数据与后面命令打包一起发送
             int time_256 = ui->AutoSendTime_256->text().toInt();
             Sleep(time_256);
             qDebug()<<"一次256B数据发送完毕:"<<endl;
          }
    
    }

     

    小bug:最后如果剩下122Byte没发送,也会发送256Byte,无效数据填充0XFFFF,不过STM32的FLASH被擦除后也是0XFFFF

     

     

    展开全文
  • 为研究高速列车高谐波负荷模拟方法,基于正弦切割数学模型分析了高速列车四象限变流脉冲波产生的机理,理论推导出对应不同采样技术负荷电流高谐波频谱计算公式,进而提出了种新的高速列车高谐波负荷建模...
  • MVC是一种编程模式和设计思想,MVC大致...彼此的关联 用户第一次访问浏览器,地址栏中的Url地址访问Contrller中的动作[Action],控制来决定显示哪一个视图  Model:定义信息格式页面信息验证(其实就是数据...

    MVC是一种编程模式和设计思想,MVC大致切割为三个主要单元:Model(实体模型),View(视图),Contrller(控制器),MVC主要目在于简化软件开发的复杂度,让程序代码形成一个松耦合

    彼此的关联性 用户第一次访问浏览器,地址栏中的Url地址访问Contrller中的动作[Action],控制器来决定显示哪一个视图

      Model:定义信息格式页面信息验证(其实就是数据表)。

      View:呈现给用户的界面,显示后台给前台传输的数据,将用户输入的数据传到后台控制器处理。

      Controller:响应客户请求,指定要显示的数据,协调Model把数据值传到View,进行各种逻辑处理。

    MVC有一个重要的观念‘关注点分离’:不受到相同系统中其他对象的干扰,也包括对对象所做出的修正不会影响到其他对象的运作。优点:简化复杂程度,提高可维护性使测试更容易。

    MVC是一个合理使用习惯替换配置的开发配置框架。

    使用MVC开发项目建议

      1.减少代码缀余,避免写重复的代码

      2.在项目开发是要搭建项目架构,没有完美的架构,适合本次开发的就是最好的。

      3.写代码要发散性思维,不仅要写还要想怎样写更方便,更兼容,可以給后面的代码打基础。

      4.明确分工,不仅团队协作要分工,代码模块也要分工,保证代码不杂乱。

      5.对于相同的功能要降低代码的复杂程度提高可读性,团队开发更轻松。

      6.让个组件抽象化,降低各组件之间的耦合度(减少各组件的依赖度)

    PS:小菜一只请多多指教

     

    转载于:https://www.cnblogs.com/ZxtIsCnblogs/p/7719546.html

    展开全文
  • 关键字top排行榜业务

    2018-04-24 21:31:32
    计数首先想到字典一次性统计 使用切割要想到默认以空格切割字符串,遇到特殊字符包含单词时,需要二次切割 对应二次切割首先想到高阶函数,传参对象传入函数 注意二次切割出来后返回什么值?是列表还是什么,根据需求...
  • 假设一名旅行商打算拜访一张城市列表中的所有城市,每座城市只去一次,最后回到出发地。要怎么走才能让路线最短呢?这就是旅行商问题,乍一听很简单,在应用数学界却是一道研究极其热烈的难题,时至今日仍无人能解。...
  • 什么是晶振晶振一般叫做晶体谐振,是一种机电器件,是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。对于单片机来说晶振是很重要的,可以说是没有晶振就没有...单片机访问一次存储器的时间,称...
  • 有些装置会考虑到你手腕的每一次弹跳,但大多数不会,最后你会看到一个90度旋转的视频。Gilisoft视频编辑的旋转可以帮助你旋转视频文件,而且效果很好。  (6)先进的视频切割功能  Gilisoft视频编辑的先进...
  • 我们已经开发了种新型的双酶化学,称为rhAmp:registered:SNP基因分型,它基于RNase H2依赖PCR(rhPCR),可为SNP分析提供高信号和特异。 rhAmp SNP基因分型将独特的两种酶系统与3'末端封闭的DNA-RNA杂交引物...
  • 电缆故障测试仪

    2015-05-29 12:48:40
    每按动一次“采样”键,系统便采集一次数据,并可以在图形显示区绘出波形图来。  “扩展”键:为了精确计算故障距离,按此键可将显示的波形扩展后再计算故障距离。每按一次波形扩展一倍,按四次为一个循环。  ...
  • 、Beatbox 和LiViD等,让您一次就可拥有这些专业乐器,不必再加购其他外挂乐器。 后制工具MAGIX mastering Suite 后制效果组MAGIX mastering Suite 的操作面板更增添专业质感了! 您可以这些专业功能的效果,来为...
  • 也可以在<code>ts函数中根据任务的执行时间判断是否应该一次性执行多个任务。 我们将<code>ts函数稍微改进一下: <pre><code>javascript function ts (gen) { if (typeof gen === 'function&...
  • 面向对象数据搜索实战输入处理文本编辑表格数据树状显示数据搜索可视化第步实现查询窗体数据搜索可视化第二步实现搜索数据数据搜索可视化第三步实现显示窗体数据可视化第四步显示与搜索串联数据可视化终结作业...
  • 本强强系列插件

    2013-03-19 19:47:02
    3:zq_copyProperty.mse --批量修改多个选择物体的相同属性或则相似属性(如可以一次修改多个都有子材质的物体的多维材质中某种贴图或所有贴图的亮度值)。也可以拷贝一个物体的某属性值给多个选择物体的某属性。 4:...
  • Java目录监视源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • 本版本是高清版,是第1版第18印刷,是书签最全最好的版本。 基本信息 原书名: The C++ Programming Language, Special Edition 原出版社: Addison Wesley 作者: (美)Bjarne Stroustrup 译者: 裘宗燕 丛书名...
  • 本版本是高清版,是第1版第18印刷,是书签最全最好的版本。 基本信息 原书名: The C++ Programming Language, Special Edition 原出版社: Addison Wesley 作者: (美)Bjarne Stroustrup 译者: 裘宗燕 丛书名...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    本版本是高清版,是第1版第18印刷,是书签最全最好的版本。 基本信息 原书名: The C++ Programming Language, Special Edition 原出版社: Addison Wesley 作者: (美)Bjarne Stroustrup 译者: 裘宗燕 丛书名...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • 字幕通集成视频播放、时间轴切割和文字翻译多种操作于同个界面,方便用户从全局把控翻译进程;在智能识别以外,字幕通也提供了丰富的手动调校功能,让软件的专业与人性化相得益彰。 6.搜索字幕: 通过想查找...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • Java目录监视源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...
  • Java目录监视源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...
  • FFQueue是款非常强大、好用的视频转码软件,其支持的H265编码,经过它压缩后的视频文件非常小,而且画质基本和压缩前不会有太大区别。对手机可变帧录制的视频,经过转换后不会出现声画不同步问题。 FFQueue支持...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

一次性切割器