瓷砖模型图金宝app

这个例子展示了如何创建一个跨多个页面的大型图表报表。

用图像块创建报表

打开一个带有大图表的模型。

模型=“slreportgen_demo_big_diagram”;open_system(模型);

创建大的图像文件分割成块。

imgFile =[模型“使用”];打印(“-dpng”,(“s”模型],imgFile);

创建并打开一个报告。

若要创建Word报告,请将输出类型从“pdf”更改为“docx”。若要创建HTML报告,请将“pdf”更改为“HTML”或“HTML -file for”多文件报告或单文件报告。rpt = slreportgen.report.Report (“myreport2”,“pdf”);打开(rpt);

获取页面布局信息。

pageLayout = rpt.Document.CurrentPageLayout;页大小= pageLayout.PageSize;pageMargins = pageLayout.PageMargins;

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

pageMargins。头=“0”;pageMargins。页脚=“0”;

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

dpi = 96;单位= mlreportgen.utils.units;tileHeight = units.toPixels (pageSize.Height,“决议”dpi)...units.toPixels (pageMargins.Top“决议”dpi)...units.toPixels (pageMargins.Bottom“决议”dpi)...units.toPixels (pageMargins.Header“决议”dpi)...units.toPixels (pageMargins.Footer“决议”dpi)...units.toPixels (“0.5”,“决议”,dpi);tileWidth = units.toPixels (pageSize.Width,“决议”dpi)...units.toPixels (pageMargins.Left“决议”dpi)...units.toPixels (pageMargins.Right“决议”dpi)...units.toPixels (pageMargins.Gutter“决议”,dpi);tileSize = [tileWidth; tileHeight];

调用sliceImage局部函数(参见下面)将大图像文件分割成图像块。

块= sliceImage(imgFile, [tileWidth tileHeight]);

将平铺图像添加到报表中。另外,还可以添加一个标题来指示平铺图像相对于整个图像的位置。

i = 1:numel(tiles) tile = tiles{i};formalImage = mlreportgen.report.FormalImage (tile.File);formalImage。ScaleToFit = false;formalImage。标题= sprintf ('row: %d, col: %d'瓷砖。行,tile.Col);add (rpt, formalImage);结束

生成并显示报告。

关闭(rpt);rptview (rpt);

定义sliceImage局部函数

要将图像文件分割成块,请读入图像文件并将块大小的部分复制到多个图像文件中。

函数tile = sliceImage(imgFile, tileSize)读取图像文件并确定行数和列数%瓷砖。请注意,图像数据是以行为主的,而行位于其中首先指定%,然后是列。img = imread (imgFile);imgSize =大小(img);imgRows = imgSize (1);%的形象高度imgCols = imgSize (2);%图像宽度tileNumRows = tileSize (2);%瓷砖高度tileNumCols = tileSize (1);%瓷砖宽度numCols = ceil(imgCols / tileNumCols);numRows = ceil(imgrow / tileNumRows);预分配块数据结构。tiles = cell(1, numCols*numRows);%确定创建平铺图像文件名的基本文件名。[fPath, fName, fExt] = fileparts(imgFile);tileName = fullfile(fPath, fName);遍历所有行和列。数= 0;rowIdx = 1: numRowscolIdx = 1: numCols确定要复制的图像数据的起始和结束索引%进入平铺图像。在边缘,结束的指标是行数和列数。rowStart = (rowIdx - 1) * tileNumRows + 1;rowEnd = rowStart + tileNumRows - 1;colStart = (colIdx - 1) * tileNumCols + 1;colEnd = colStart + tileNumCols - 1;如果(rowEnd >= imgrow) rowEnd = imgrow;结束nTileRows = rowEnd - rowStart + 1;如果(colEnd >= imgCols)结束nTileCols = colEnd - colStart + 1;将平铺图像数据复制到白色图像平铺上。tileImg = uint8(255 * 1 (tileNumRows, tileNumCols, 3));tileImg(1:nTileRows, 1:nTileCols,:) = img(rowStart:rowEnd,...colStart: colEnd:);%写出图像平铺。输出文件= sprintf (' % s_ % d_ % d % s ', tileName, rowIdx, colIdx, fExt);imwrite (tileImg输出文件);创建瓦片数据结构来描述瓦片。count = count + 1;瓷砖{数}=结构(...“文件”输出文件,...“行”rowIdx,...“上校”,colIdx);结束结束结束