c#
VB
c++
控件中加载大量项的支持imageview.
公共摘要类ImageViewerVirtualizer
公共mustlinherit类ImageViewerVirtualizer
公共ref类ImageViewerVirtualizer摘要
的ImageViewerVirtualizer为处理大量图像数据提供支持imageview通过按需加载和卸载项数据,完全控制呈现占位符,并控制要缓存到内存中的项的数量。
有关详细信息,请参见图像查看器Virtualizer.
使用Leadtools;
使用Leadtools.Controls;
使用Leadtools.Codecs;
使用Leadtools.Drawing;
公共无效ImageViewerVirtualizer_Example ()
{
字符串imageFileName = GetExampleImageFile();
//创建一个新表单来测试virtualizer
MyForm form =新MyForm (imageFileName);
form.ShowDialog ();
}
私人静态字符串GetExampleImageFile ()
{
字符串imageFileName = Path.Combine(LEAD_VARS.ImagesDir,“ImageViewerVirtualizerExample.tif”);
//检查之前是否创建,返回
如果(File.Exists (imageFileName))
返回imageFileName;
//创建一个包含许多页面的图像,我们将使用它进行测试
常量intpageccount = 100;
常量intimageWidth = 800;
常量intimageHeight = 800;
varrc =新矩形(0,0,imageWidth, imageHeight);
使用(RasterCodecs codecs =新RasterCodecs ())
使用(字体=新字体(FontFamily。GenericMonospace, 80))
{
为(intPage = 1;page <= pageCount;+ +页)
{
使用(RasterImage image = RasterImage。创建(imageWidth, imageHeight, 24,96, RasterColor.FromKnownColor(RasterKnownColor.White)))
{
IntPtr hdc = RasterImagePainter.CreateLeadDC(image);
使用(图形= Graphics. frommhdc (hdc))
{
graphics.DrawRectangle(笔。蓝色,0,0 rc。宽度- 1 rc。高度- 1);
TextRenderer。DrawText(图形,“页面”+ page.ToString(),字体,rc,颜色。红色,TextFormatFlags。HorizontalCenter|TextFormatFlags.VerticalCenter);
}
RasterImagePainter.DeleteLeadDC (hdc);
编解码器。保存(图像,imageFileName, RasterImageFormat。TifLzw, 0, 1, -1, -1, page == 1 ?CodecsSavePageMode。覆盖:CodecsSavePageMode.Append);
}
}
}
返回imageFileName;
}
//自定义Virtualizer
公共类MyVirtualizer: ImageViewerVirtualizer
{
私人字符串_imageFileName;
公共MyVirtualizer (字符串imageFileName):
基地()
{
_imageFileName = imageFileName;
//我们一次加载4个项目
这.MaximumItems = 4;
}
受保护的覆盖对象LoadItem (ImageViewerItem项)
{
//加载一个页面,页码是项目索引+ 1,但它
例如,//可以是应用程序中的任何内容
//使用ImageViewerItem。标记,以存储标识此项目所需的数据
intpageNumber =这.ImageViewer.Items.IndexOf(item) + 1;
使用(RasterCodecs codecs =新RasterCodecs ())
{
返回编解码器。负载(_imageFileName pageNumber);
}
}
受保护的覆盖无效SaveItem (ImageViewerItem项,对象数据)
{
//在这个应用程序中什么都不做,只是记录它。
//如果需要保存,则在此处执行
intpageNumber =这.ImageViewer.Items.IndexOf(item) + 1;
System.Diagnostics.Debug.WriteLine ("页面{0}的SaveItem被称为");
}
受保护的覆盖无效DeleteItem (ImageViewerItem项,对象数据)
{
//处理图像
RasterImage image = data作为RasterImage;
如果(图片! =零)
image.Dispose ();
}
受保护的覆盖无效RenderItemPlaceholder (ImageViewerRenderEventArgs e)
{
//显示该页的占位符
intpageNumber =这.ImageViewer.Items.IndexOf(e.Item) + 1;
LeadMatrix变换=这.ImageViewer.GetItemImageTransform (e.Item);
图形= e.PaintEventArgs.Graphics;
//在这个项目转换中呈现在0,0处的消息
LeadPointD pt = LeadPointD。创建(0,0);
pt = transform.Transform(pt);
字符串消息=字符串.Format (“正在加载页面{0}…”, pageNumber);
图形。拉带(消息,这.ImageViewer。字体、画笔。黑色(浮动pt。X (浮动) pt.Y);
}
}
//测试虚拟程序
类MyForm:表单
{
公共MyForm (字符串imageFileName)
{
_imageFileName = imageFileName;
}
私人imageview _imageViewer;
私人字符串_imageFileName;
受保护的覆盖无效OnLoad (EventArgs e)
{
//创建一个垂直布局的新图像查看器
_imageViewer =新imageview (新ImageViewerVerticalViewLayout {Columns = 1});
_imageViewer。BackColor = Color.Bisque;
_imageViewer。做ck = DockStyle.Fill;
//增加缩放交互模式
_imageViewer.InteractiveModes.Add (新ImageViewerPanZoomInteractiveMode ());
这.Controls.Add (_imageViewer);
_imageViewer.BringToFront ();
//添加空项,每个空项的大小都是正确的
使用(RasterCodecs codecs =新RasterCodecs ())
{
intpageCount;
LeadSize页大小;
LeadSizeD pageResolution;
使用(CodecsImageInfo信息=编解码器。GetInformation (_imageFileName真正的))
{
pageCount = info.TotalPages;
pageSize =铅大小。宽度,info.Height);
pagerresolution = leadsize . create(信息。XResolution info.YResolution);
}
_imageViewer.BeginUpdate ();
为(intPage = 1;page <= pageCount;+ +页)
{
//没有图像数据,虚拟器将负责加载页面并渲染它们
ImageViewerItem item =新ImageViewerItem ();
项。ImageSize = pageSize;
项。分辨率= pagerresolution;
_imageViewer.Items.Add(项);
}
_imageViewer.EndUpdate ();
}
//最后,设置我们的虚拟器,使它可以开始工作
_imageViewer。仿真器=新MyVirtualizer (_imageFileName);
//运行demo,使用平移(拖动)和缩放(CTRL-CLICK和拖动)来显示项目
//当它们在视图中时,注意它们是如何加载的
//改变MaximumItems的数量以查看其效果。
基地.OnLoad (e);
}
}
静态类LEAD_VARS
{
公共常量字符串ImagesDir =@“C: \ LEADTOOLS21 \ Resources \图片”;
}
进口Leadtools
进口Leadtools。控制
进口Leadtools。编解码器
进口Leadtools。画
进口LeadtoolsControlsExamples.LeadtoolsExamples.Common
公共子ImageViewerVirtualizer_Example ()
昏暗的imageFileName作为字符串= GetExampleImageFile ()
创建一个新表单来测试virtualizer
昏暗的形式作为MyForm =新MyForm (imageFileName)
form.ShowDialog ()
结束子
私人共享函数GetExampleImageFile ()作为字符串
昏暗的imageFileName作为字符串= Path.Combine (ImagesPath.Path“ImageViewerVirtualizerExample.tif”)
’检查它是否以前创建过,并返回它
如果File.Exists (imageFileName)然后
返回imageFileName
结束如果
“创建一个包含许多页面的图像,我们将使用它进行测试
常量pageCount作为整数= 100
常量imageWidth作为整数= 800
常量imageHeight作为整数= 800
昏暗的钢筋混凝土作为新矩形(0,0,imageWidth, imageHeight)
使用编解码器作为RasterCodecs =新RasterCodecs ()
使用字体作为字体=新字体(FontFamily。GenericMonospace, 80)
为页面作为整数= 1来pageCount
使用图像作为RasterImage = RasterImage。创建(imageWidth, imageHeight, 24,96, RasterColor.FromKnownColor(RasterKnownColor.White))
昏暗的hdc作为IntPtr = RasterImagePainter.CreateLeadDC(image)
使用图形作为图形= Graphics . frommhdc (hdc)
graphics.DrawRectangle(笔。蓝色,0,0 rc。宽度- 1 rc。高度- 1)
TextRenderer。DrawText(图形,“页面”& page.ToString(),字体,rc,颜色。红色,TextFormatFlags。HorizontalCenter或TextFormatFlags.VerticalCenter)
结束使用
RasterImagePainter.DeleteLeadDC (hdc)
如果Page = 1然后
编解码器。保存(图像,imageFileName, RasterImageFormat。TifLzw, 0, 1, -1, -1, codecssavepagmode . overwrite)
其他的
编解码器。保存(图像,imageFileName, RasterImageFormat。TifLzw, 0, 1, -1, -1, codecssavepagemode . appde)
结束如果
结束使用
下一个页面
结束使用
结束使用
返回imageFileName
结束函数
自定义Virtualizer
公共类MyVirtualizer:继承了ImageViewerVirtualizer
私人_imageFileName作为字符串
公共子新(按值传递imageFileName作为字符串)
MyBase.新()
_imageFileName = imageFileName
“我们一次将装载4件物品
我.MaximumItems = 4
结束子
受保护的覆盖函数LoadItem (按值传递项作为ImageViewerItem)作为对象
加载一个页面,页码是项目索引+ 1,但它
'可以是应用程序中的任何内容
'使用ImageViewerItem。标记,以存储标识此项目所需的数据
昏暗的pageNumber作为整数=我.ImageViewer.Items.IndexOf(item) + 1
使用编解码器作为RasterCodecs =新RasterCodecs ()
返回编解码器。负载(_imageFileName pageNumber)
结束使用
结束函数
受保护的覆盖子SaveItem (按值传递项作为ImageViewerItem,按值传递数据作为对象)
“在这个应用程序中什么都不用做,只是记录它。
如果需要保存,那么就在这里执行
昏暗的pageNumber作为整数=我.ImageViewer.Items.IndexOf(item) + 1
System.Diagnostics.Debug.WriteLine ("页面{0}的SaveItem被称为")
结束子
受保护的覆盖子DeleteItem (按值传递项作为ImageViewerItem,按值传递数据作为对象)
'处理图像
昏暗的图像作为RasterImage = TryCast(数据,RasterImage)
如果不图像是没有什么然后
image.Dispose ()
结束如果
结束子
受保护的覆盖子RenderItemPlaceholder (按值传递e作为ImageViewerRenderEventArgs)
'渲染此页的占位符
昏暗的pageNumber作为整数=我.ImageViewer.Items.IndexOf(e.Item) + 1
昏暗的变换作为LeadMatrix =我.ImageViewer.GetItemImageTransform (e.Item)
昏暗的图形作为Graphics = e.PaintEventArgs.Graphics
'在此项目转换中呈现0,0处的消息
昏暗的pt作为LeadPointD = LeadPointD。创建(0,0)
pt = transform.Transform(pt)
昏暗的消息作为字符串=字符串.Format (“正在加载页面{0}…”pageNumber)
图形。拉带(消息,我.ImageViewer。字体、画笔。黑色的,CSng(pt.X),CSng(pt.Y))
结束子
结束类
'表单来测试虚拟器
私人类MyForm:继承了形式
公共子新(按值传递imageFileName作为字符串)
_imageFileName = imageFileName
结束子
私人_imageViewer作为imageview
私人_imageFileName作为字符串
受保护的覆盖子OnLoad (按值传递e作为EventArgs)
创建一个垂直布局的新图像查看器
昏暗的viewLayout作为新ImageViewerVerticalViewLayout
viewLayout。列= 1
昏暗的_imageViewer作为新imageview (viewLayout)
_imageViewer。BackColor =颜色。浓汤
_imageViewer。做ck = DockStyle.Fill
“增加缩放互动模式
_imageViewer.InteractiveModes.Add (新ImageViewerPanZoomInteractiveMode ())
我.Controls.Add (_imageViewer)
_imageViewer.BringToFront ()
“添加空物品,每件物品的大小都是正确的
使用编解码器作为RasterCodecs =新RasterCodecs ()
昏暗的pageCount作为整数
昏暗的页大小作为LeadSize
昏暗的pageResolution作为LeadSizeD
使用信息作为CodecsImageInfo =编解码器。GetInformation (_imageFileName真正的)
pageCount = info。TotalPages
pageSize =铅大小。宽度,info.Height)
pagerresolution = leadsize . create(信息。XResolution info.YResolution)
结束使用
_imageViewer.BeginUpdate ()
昏暗的页面作为整数= 1
做而page <= pageCount
'没有图像数据,虚拟器将负责加载页面和渲染它们
昏暗的项作为ImageViewerItem =新ImageViewerItem ()
项。ImageSize = pageSize
项。分辨率= pagerresolution
_imageViewer.Items.Add(项)
Page += 1
循环
_imageViewer.EndUpdate ()
结束使用
最后,设置我们的虚拟器,让它可以开始工作
_imageViewer。仿真器=新MyVirtualizer (_imageFileName)
’运行演示,使用平移(拖动)和缩放(CTRL-CLICK并拖动)来显示项目
注意它们在视野中是如何加载的
改变MaximumItems的数量,看看效果如何。
MyBase.OnLoad (e)
结束子
结束类
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗网络查看器net
188宝金博怎么下载
支持的平台上
.NET、Java、Android和iOS/macOS程序集
C API/ c++类库
HTML5 JavaScript库
您的邮件已发送给技术支持!应该有人联系!如果你的事情很紧急,请回来聊天。
聊天时间:
周一至周五,美国东部时间上午8:30至下午6:00
感谢您的反馈!
请再次填写表格,开始新的聊天。
所有代理目前都离线。
聊天时间:
星期一至星期五
美国东部时间上午8:30 -下午6点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。