设为首页 | 收藏本站
首页>IT学院>软件编程>正文
照片生成缩略图时的尺寸计算
WWW.DBIT.CN 2007-12-21 8:06:25 热度:
 
  为了能保持住照片在缩小时不变形,所以需要重新计算缩略图的尺寸. 这里默认缩略图的尺寸的应该满足 长 >= 宽, 否则计算规则应有所变化.

今天突然想明白了,记在这里以后备用.
///
/// 取得缩略图的尺寸
///

/// 原始尺寸
/// 目标尺寸
///
public static Size GetSacaledSize(Size oldSize, Size desiredSize)
{
if (oldSize.Height == 0    oldSize.Width == 0)
throw new Exception("The pic's width and height not set.");

Size outSize = new Size();
bool flag = false;

//如果宽> 长,则按宽缩放 width = DesiredWidth.
//如果 宽<= 长. 则按长缩放 height = DesiredHeight.

if (oldSize.Width <= desiredSize.Width && oldSize.Height <= desiredSize.Height)
{
outSize = oldSize;
flag = true;
}

if (!flag)
{
if (oldSize.Width > oldSize.Height)
{
outSize.Width = desiredSize.Width;
double ratio = (double)desiredSize.Width / oldSize.Width;
outSize.Height = Convert.ToInt32(oldSize.Height * ratio);
flag = true;
}
}

if (!flag)
{
outSize.Height = desiredSize.Height;
double ratio = (double)desiredSize.Height / oldSize.Height;
outSize.Width = Convert.ToInt32(oldSize.Width * ratio);
}


return outSize;
}

这里是单元测试代码:

///
/// 这个测试用来测试在几种不同尺寸下面的缩略图尺寸算法的问题.
///

[TestFixture]
public class PhotoCacheTestFixture
{
[Test]
public void CacheSizeTest()
{
Photos p = new Photos();

//常见情况, 长大于宽的尺寸.
p.PhotoHeight = 1200;
p.PhotoWidth = 1600;

Size sizeSacled = p.SacledSize(ScaledPicSize.Instance.Size130x130);

Console.WriteLine("1600X1200");
Console.WriteLine(sizeSacled.Width);
Console.WriteLine(sizeSacled.Height);
Console.WriteLine("++++++++++++++++++");

Assert.IsTrue(sizeSacled.Width <= 130);
Assert.IsTrue(sizeSacled.Height <= 130);

//原图比缩略图尺寸还小的情况.直接返回原尺寸.
p.PhotoWidth = 100;
p.PhotoHeight = 80;

Size size2 = p.SacledSize(ScaledPicSize.Instance.Size130x130);

Console.WriteLine("100X80");
Console.WriteLine(size2.Width);
Console.WriteLine(size2.Height);
Console.WriteLine("++++++++++++++++++");


Assert.IsTrue(size2.Width <= 130);
Assert.IsTrue(size2.Height <= 130);

// 长版的图片尺寸.

p.PhotoWidth = 80;
p.PhotoHeight = 140;

Size size3 = p.SacledSize(ScaledPicSize.Instance.Size130x130);

Console.WriteLine("80X140");
Console.WriteLine(size3.Width);
Console.WriteLine(size3.Height);
Console.WriteLine("++++++++++++++++++");

Assert.IsTrue(size3.Width <= 130);
Assert.IsTrue(size3.Height <= 130);
}
}
 
上一篇:没有了
下一篇:.Net中如何连接到ODBC数据源
打印】【关闭
  相关文章:
☆联姻学院☆

两招解决打开U盘看不到文档的
深入分析电脑死机的14个问题
机器狗变种病毒分析解决参考
黑客入侵Linux操作系统 
Excel使用中常被忽略的十条实
Excel行列转置粘贴数据的一则
XP系统中重置TCP/IP协议的方法
用Windows磁盘配额增强系统安
平面设计中的常用字库种类说明
Photoshop cs2在Vista下的尴尬
调整CSS类型的顺序改变链接翻
如何用CSS让文字居于div的底部
照片生成缩略图时的尺寸计算
.Net中如何连接到ODBC数据源 
Linux系统网络配置详细解析 
认识Windows下虚拟专用网服务

精品图秀
美女面相大盘点
清新孙俪纯情写真
刘羽琦最新写真
4000元气死洪金宝配置 众数码厂家挺进手机领 牛根生谈马云 中国高校不宜过分扩招 数码相机配件选购误区