收藏本站 
广告服务 
网站地图 
>> 为你提供近10万篇各类电脑技术文章、网络技术教程、软件技术文章、网页设计教程、平面设计教程、数据库技术教程等方面的电脑教程!
先飞电脑技术网技术文章网络编程ASP.Net
网络编程 | 网站建设 | 网络技术 | 设计教程 | 软件教学 | 程序开发 | 数据库开发 | 教育认证 | 硬件维护 | 媒体动画 | 机械电子 |

照片生成缩略图时的尺寸计算

[ 作者:佚名    转贴自:网络转载    阅读次数:45    更新时间:2007-12-22 11:31:00   录入:刘光勇 ]        
    为了能保持住照片在缩小时不变形,所以需要重新计算缩略图的尺寸. 这里默认缩略图的尺寸的应该满足 长 >= 宽, 否则计算规则应有所变化.

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

/// 原始尺寸
/// 目标尺寸
///
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);
}
}
文章首页【加入到收藏夹】告诉好友】【打印此文】【关闭窗口
  版权声明:本站提供的“照片生成缩略图时的尺寸计算”版权归文章所有者,转载请注明出处!
 ·上一篇文章:T-SQL语句实现数据库备份与还原      ·下一篇文章:没有了
相关文章
·照片生成缩略图时的尺寸计算[45]
·Flash将风景照片制作成梦幻仙境动画效果[56]
·教你用摄像头拍出漂亮的照片[67]
·用Photoshop计算命令优化美女照片皮肤[18]
·3DS MAX仿照室内照片做三维虚拟现实模型[98]
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 隐私政策 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号 先飞电脑教程网