主要内容

瓷砖Sim金宝appulink图

此示例显示如何创建一个具有跨多个页面跨越的大图的报告。

使用图像瓷砖创建报告

用大图打开模型。

模型='slreportgen_demo_big_diagram';Open_System(型号);

创建大型图像文件以拆分为图块。

imgfile = [模型'.png'];打印('-dpng',['-s'型号],imgfile);

创建和打开报告。

%要创建一个单词报告,将输出类型从“PDF”更改为“DOCX”。%要创建HTML报告,将“PDF”更改为“HTML”或“HTML文件”%分别是一个多重或单文件报告。RPT = SLRREPORTGEN.REPORT.REPORT('myReport2''pdf');打开(RPT);

获取页面布局信息。

pagelayout = rpt.document.currentpagelayout;pagesize = pagelayout.pagesize;Pagemargins = pagelayout.pagemargins;

将页眉和页脚设置为0英寸以最大化空间。

Pagemargins.Header =.'0in';Pagemargins.footer =.'0in';

确定适合页面的图像块大小。最佳瓦片大小是页面大小减去页面边距,排水沟,页眉和页脚。此外,调整瓷砖高度以允许0.5英寸的标题。请注意,对于PDF文档,MATLAB报告生成器定义一英寸等于96像素。

DPI = 96;单位= mlreportgen.utils.units;Tileheight = Unition.Topixels(PageSize.Height,'解析度',DPI)......- 单位.Topixels(Pagemargins.top,'解析度',DPI)......-  Units.Topixels(Pagemargins.bottom,'解析度',DPI)......-  Unition.Topixels(Pagemargins.Header,'解析度',DPI)......-  Units.Topixels(Pagemargins.footer,'解析度',DPI)......- 单位.Topixels('0.5英寸''解析度',DPI);TileWidth = Units.Topixels(PageSize.Width,'解析度',DPI)......-  Unition.Topixels(Pagemargins.left,'解析度',DPI)......- 单位.Topixels(Pagemargins.Right,'解析度',DPI)......-  Units.Topixels(Pagemargins.Gutter,'解析度',DPI);tilesize = [Tilewidth Tileheight];

调用SleiceImage本地功能(见下文)将大型图像文件切成图像图块。

瓷砖= sliceImage(imgfile,[Tilewidth Tileheight]);

将图块图像添加到报告中。此外,还添加标题以指示瓦片图像与整体图像相关的位置。

为了i = 1:numel(瓷砖)瓷砖=瓷砖{i};拼接= mlreportgen.report.formalimage(瓦片。拼接逻辑.caletofit = false;甲醛.Caption = Sprintf('行:%d,col:%d',瓷砖,瓷砖。添加(RPT,运送);结尾

生成并显示报告。

关闭(RPT);rptview(RPT);

定义SleiceImage本地功能

将图像文件切成图块,在图像文件中读取,并将Tile-Size部件复制到多个图像文件中。

功能TILES = SLICEIMAGE(IMGFILE,TILESIZE)%在图像文件中读取并确定行和列的数量%瓷砖。请注意,图像数据是row-major,其中行是%首先指定,列是秒。img = imread(imgfile);Imgsize =尺寸(IMG);IMGROS = IMGSIZE(1);%图像高度Imgcols = Imgsize(2);%图像宽度tilenumrows = tilezize(2);%瓷砖高度Tilenumcols = TiXeize(1);%瓷砖宽度numcols = ceil(Imgcols / tilenumcols);numrows = ceil(Imgrow / tilenumrows);%prelocate瓷砖数据结构。瓷砖= cell(1,Numcols * numrows);%确定基础文件名以创建图块图像文件名。[fpath,fname,fext] = fileparts(imgfile);tilename = fullfile(fpath,fname);%迭代所有行和列。count = 0;为了rowidx = 1:numrows为了colidx = 1:numcols%确定要复制的起始和结束图像数据索引%进入瓷砖图像。在边缘,结束指数是%行数和列数。RowStart =(ROWIDX-1)* Tilenumrows + 1;划变= RowStart + Tilenumrows  -  1;COLSTART =(Colidx-1)* Tilenumcols + 1;Colend = Colstart + Tilenumcols  -  1;如果(划变> = imgrows)划变= imgrows;结尾ntilerows = rowend  -  rowstart + 1;如果(Colend> = Imgcols)Colend = Imgcols;结尾ntilecols = colend  -  colstart + 1;%将瓷砖图像数据复制到白色图像块上。Tileimg = UINT8(255 * uint8(Tilenumrows,Tilenumcols,3));Tileimg(1:ntilerows,1:ntilecols,:) = img(RowStart:Clowend,......COLSTART:COLEND,:);%写出图像瓦片。Outfile = Sprintf('%s_%d_%d。%s',tilename,rowidx,colidx,fext);IMWrite(Tileimg,Outfile);%创建图块数据结构以描述图块。count = count + 1;瓷砖{count} = struct(......'文件',出口,......'排',rowidx,......'col',Colidx);结尾结尾结尾