说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

图像缩放和居中显示的问题

编辑:说三道四文库 发布时间:2017-12-18 12:09
HTML文档下载 WORD文档下载 PDF文档下载
一个MDI子窗体中,上面放一个TImage,动态载入图片

我想让载入的图像缩放正好显示,如果图片的长和宽都小于MDI主窗体(FormMain)的长和宽,就按原来大小显示,如果不满足以上条件,就缩放,显示的图像尽量大,最后让这个子窗体显示在主窗体的中间。源码如下:

if (Image->Picture->Width < FormMain->ClientWidth - 55
        && Image->Picture->Height < FormMain->ClientHeight - 55) {
        int picWidth = Image->Picture->Width;
        int picHeight = Image->Picture->Height;
        Image->Width = picWidth;
        Image->Height = picHeight;
        ClientWidth = picWidth;
        ClientHeight = picHeight;
    } else if (Image->Picture->Width > Image->Picture->Height) {
        Image->Width = FormMain->ClientWidth - 50;
        ClientWidth = Image->Width;
        Image->Height = Image->Picture->Height* ClientHeight/Image->Picture->Width;
    } else {
        Image->Height = FormMain->ClientHeight - 50;
        ClientHeight = Image->Height;
        Image->Width = Image->Picture->Width * ClientWidth / Image->Picture->Height;
    }

    Left = (FormMain->ClientWidth - Width) / 2;
    Top = (FormMain->ClientHeight - Height) / 2;
    
现在的问题是,如果图片的长或宽有一个大于MDI主窗体(FormMain)的长或宽 ,显示出来的图片旁边有很大空白,我不明白,请高手给我看看。

Image的几个属性:
autosize=false
Stretch = true
Proportional=true
老兄!我想你是搞错了!如果你不想使用Autosize=true,这样啊!
bmp->Width = Image->Width;
bmp->Height = Image->Height;

然后再来确定Image控件的位置!
bmp->Width,bmp->Height是什么变量?

指代哪个?
那是自然,因为图象缩小的比例和你窗口(不符合要求的)的比例不一样呀
给你一个函数吧

TRect Set_Size( int OwnerWidth, int OwnerHeight, int BmpWidth, int BmpHeight)
{
    TRect result;
    int High,Width;
    int X1,Y1,X2,Y2;
    if (((float)OwnerWidth/OwnerHeight)>((float)BmpWidth/BmpHeight)){
        High  = OwnerHeight;
        Width = (double)High*(double)BmpWidth/(double)BmpHeight;
    }
    else{
        Width = OwnerWidth;
        High  = (double)Width*(double)BmpHeight/(double)BmpWidth;
    }
    X1 = (OwnerWidth-Width)/2;
    Y1 = (OwnerHeight-High)/2;
    X2 = X1 + Width;
    Y2 = Y1 +High;
    result.Left   = X1;
    result.Top    = Y1;
    result.Right  = X2;
    result.Bottom = Y2;
    return result;
}
参数OwnerWidth OwnerHeight 是Image 的宽高 BmpWidth BmpHeight 是bmp 的宽高
返回的矩形就是bmp应该在image 里面的位置
记住Image AutoSize = false Stretch = false
这样就能保证图象显示的宽高和原图宽高比例一样了
例:
       Graphics::TBitmap * bmp = new Graphics::TBitmap;
       bmp->LoadFromFile("c:\\b.bmp");
       TRect rect = Set_Size(Image1->Width,Image1->Height,bmp->Width,bmp->Height);
       Image1->Canvas->StretchDraw(rect,bmp);
       delete bmp; bmp = NULL;
英雄组队去打怪!Nimble Quest开发团队访谈 云通讯平台打造本土Twilio 被逼无奈?传微软或明年秋发布iOS和Android版Office 欧洲各国政府将向大众开放公共数据 访联想云存储罗予晋:优化MooseFS,共建生态系统 磊友创始人赵霏:关于HTML5与Flash争执之我见 国际混乱C语言代码大赛优胜作品详解之“A clock in one line” 揭秘程序员大脑编程的七大“误区” 从Java到ObjC语言的桥梁:谷歌J2ObjC 0.7版本亮相 数据库管理系统ParElastic:打破常规 扩展云端MySQL 谷歌苹果专利纠纷意在战略无意和解 美法官为其苦恼 Facebook收购神秘移动软件创业公司Osmeta 修改驱动,使用Erlang+VoltDB实现每秒87.7万事务 横评美国IaaS“8匹狼”:AWS、GCE、Azure、Rackspace、SoftLayer、Dell、HP、Joyent 独立游戏精神释放的舞台:IGF China 2013作品火热征集中 三款热门入门级在线编程教程对比 微软modern.IE:网站兼容性测试利器 Localytics:AngularJS代替Backbone 代码减少一半 史上增长最快的SaaS服务Optimizely:13亿访客,10万次测试 IDF上的云计算故事 移动周报:百万年薪、微信疑云,老罗小马本周很忙 一个创业失败者的自述:我是如何搞砸一款产品 收入百万美元:一个放弃上大学的程序员 Cocos2D配Box2D:逆天小白程序员作iOS游戏 招聘移动开发,老板必问的10个问题 黑客用智能手机劫持和控制民航飞机 几小时即可使互联网瘫痪的黑客 现已加入谷歌 Tsar开源:淘宝内部大量使用的系统监控工具 五款超实用的开源SVG工具 微信收费事件背后被广泛忽略的技术细节 UIDesigner 3.0架构设计总结 一个关于父子进程的问题,请大家帮帮忙好吗?急死我了! 【调查】看看你对流行音乐到底懂得多少? 有没有办法禁止类似用CCPROXY的非法代理? CSS的使用问题 怎样适用odbc连接远程access? DelPhi的错误! 如何通过共享Model上网? 用FileSystemObject 写多行txt,如何实现换行写入??? 你的邮箱已经被别人使用,请使用一个DOMINO服务器,如何解决? 清空文本文件 我编写了一个dos批处理文件bat,要在bat文件运行后自动关闭dos窗口怎么办? 急救:机器出问题了,大家帮忙看看 谁能谈谈XP的激活问题!? 有问题的问题1 有问题的问题 安装visual studio.net 2003 的问题? 急件!请教了,如何在一个字符串中提取第n次出现的字符? weblogic及EJB属于中间层的吗? 到水园第一件事就是看看斑竹有没有换,嘻嘻,还有谁也是这样的? win2000装好后,设了本地连接的属性,和别的机器一样的设,可就是PING 不通网关 哪有“VB.NET高级编程”和“ADO.NET高级编程”下载?? 请各位帮忙找一个用asp.net写的日历,急用 小弟是菜鸟,请问一下svrmgrl是什么,9I中有吗? 文章分页,而且文章中有大小不等的图片,该如何去做 求《三国霸业2》简体版下载地址? 诸位高手,我碰到一个很棘手ASPNETMENU的问题!急需解决!!(100分)献上! vfw下的视频采集和图象截取的问题请教! 求 《家园-惊世浩劫》简体版 关于浏览器的问题 pb如何调用word文挡? 在使用mfc时选择不同语言,怎么最后编译执行时有??符号(在菜单中) 网络共享安全问题!!!!!!!!!!!!! 我是第一次尝试做网站,碰到了问题,能帮帮我吗? 电话号码的正确性问题? 求教c#中datagrid表格设置 高分求远程开机源代码 希望大家给出: 时间的各种单位(包括汉字名称和英文缩写)及它们的进率关系; 专家近来看一下,很有针对性! 对《c# Primer Plus中文版》书的批判!!!!! 谁能提供teechart在pb中的使用帮助 是否有记录传真机传真的资料(包括传真号码,传真时间,内容) 是否有记录传真机传真的资料(包括传真号码,传真时间,内容) 急救:如何回复fdisk删除的分区 请各位帮忙找一个用asp.net写的日历,急用 我想了解‘Bug 列表‘是怎么回事,最好有例子 各位大哥请帮帮我,如何将下面的vbs转换到c#,不胜感激! 如何控制DataList显示的记录数 请教做过基于snmp方式的入侵检测系统的哥们 !!!!!!! 架构模式知多少? 请教做过基于snmp方式的入侵检测系统的哥们 !!!!!!! 请教各位大侠一个问题?? 书写小梦想情系中国梦作文怎么写 1.若关于x的方程ax²+2(a-b)x+(b-a)=0(a≠0)有两个相等的实数根,则a:b等于 ( )A.-1或2 B1或1/2 C-1/2或1 D-2或12.已知方程x²+bx+a=0有一个根是-a(a≠0)则下列代数式的值恒为常数的是( 【数学】初三关于一元二次方程的选择题若关于x的方程x^2+mx+2=0与x^2+(m+1)x+m=0有一个相同实数根,则m的值为( )A.3B.2C.4D.-3回答时注明过程或理由 糯米网过期未消费的团购券还能退款吗?饭店等等等等等等等等等等等等等等等等等等等等 书写梦想,情系祖国这个作文怎么写? 关于思念祖国的作文 书写梦想,情系祖国 700字 作文 咋写 情系祖国 甘愿奉陪作文200字 伊斯坦布尔属于哪个国家? 伊斯坦布尔市现在在哪个国家境内?这座历史名城曾是拜占廷帝国的首都,当时城市的名称是什么?该城在古希 题目"书写梦想,情系祖国"作文怎么写?(1000字) 美国最新隐身驱逐舰下水 明年秋季开始消息人士称叙化武生产设备销毁工作如期纽约提高香烟禁售最低年龄 未满21不研究证明蝙蝠系非典传播源 病毒可由动小狗被饿三周吃伞充饥 其主人不愿救治男子扮高富帅专门诈骗按摩女 谎称投资巴西里约热内卢社会游民多 5000余媒体曝美全球监听地图 澳大利亚是美监近3成日本大学毕业生3年内离职 疑被美国艺术家创造“糖果肖像”庆祝万圣节法国一名抢劫犯曾为iPod及8欧元抢慈世平:库里就是黑客帝国的尼奥Ozon智能戒指 一手掌控所有智能设互联网巨头的营销秀这些新规6月起执行,将怎样影响你的生《爆式幽默》第七话——大天使当然不是走出“东西方”携程网回应宕机:服务器遭不明攻击本周看啥 | 这部等了十几年的电影终现在的100万,10年后相当于现在多许式伟:十一年,从产品负责者,到公司最新报告公布外国投资者在澳洲购房情况狂暴穿越天赋荣耀十二星宫六道玄机我的笨蛋恶魔新世界的恶魔一笑仙凡无限崩坏武家栋梁旷世神魔全息游戏之父中山步行街旅游娘娘山旅游坡峰岭旅游风景区旅游龙脊峡漂流旅游龙脊梯田田头寨旅游圣三一堂旅游瑞穗温泉旅游澳门大学旅游东望洋灯塔旅游三门海旅游百魔洞旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘