TX Text Control 文字处理程序基本功能之图片大小自适应

最近有TX产品用户提出了这样的需求,就是在TX文档插入图片之后,图片大小能够只适应其父容器的大小,比如在TextFrame中插入图片之后,图片的高和宽能够根据TextFrame的大小自动进行缩放比例的调整。本文就主要介绍该功能的实现方法。<br/><div style="width:500px;height:400px;overflow:hidden"><img src="/image.ashx?picture=ImageAutoSize_thumb.gif" alt="TX Text Control 文字处理程序基本功能之图片大小自适应" width="500px" /></div>

发布于 2013/11/12 00:00

最近有TX产品用户提出了这样的需求,就是在TX文档插入图片之后,图片大小能够只适应其父容器的大小,比如在TextFrame中插入图片之后,图片的高和宽能够根据TextFrame的大小自动进行缩放比例的调整。本文就主要介绍该功能的实现方法。

实现,我们需要了解TX中的度量单位,TX中对象的度量单位是缇(Twip),而.NET中大多数使用的像素(Pixel),所以,我们第一步需要完成缇与像素之间的单位换算 1 Pixel = 1440 TPI / 96 DPI = 15 Twips,通过代码换算如下:

    Graphics g = textControl1.CreateGraphics();
    int iTwipsPerPixel = (int)(1440 / g.DpiX);

 

图片插入,以及图片缩放比例代码如下:

    private void InsertImage()
    {
        // 完成TX中使用的度量单位缇(Twip)与.NET使用的度量单位像素(Pixel)的转换
        Graphics g = textControl1.CreateGraphics();
        int iTwipsPerPixel = (int)(1440 / g.DpiX);
        OpenFileDialog dlgOpen = new OpenFileDialog();
        if (dlgOpen.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            // 加载图片
            Image tmp = Image.FromFile(dlgOpen.FileName);
            // 获取图片父容器TextFrame
            TXTextControl.TextFrame frame = textControl1.TextParts.GetMainText().TextFrames.GetItem(1000);
            // 创建TX中的图片对象
            TXTextControl.Image image = new TXTextControl.Image(tmp);
            // 设置图片ID
            image.ID = 1001;
            //设置横向和纵向缩放比例属性,注意TextFrame中可用的空间范围应该减去Margin区域
            image.HorizontalScaling = ((frame.Size.Width - frame.InternalMargins[0] - frame.InternalMargins[2]) * 100) / (tmp.Width * iTwipsPerPixel);
            image.VerticalScaling = ((frame.Size.Height - frame.InternalMargins[1] - frame.InternalMargins[3]) * 100) / (tmp.Height * iTwipsPerPixel);
            // 将图片插入到TextFrame中
            textControl1.Images.Add(image, textControl1.InputPosition.TextPosition);
        }
    }

 

运行截图:

ImageAutoSize

 

源码下载:VS2010+TX X9

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关案例
推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态