读书人

用C#程序如何区分A3/A4图像并把它们

发布时间: 2013-09-29 11:07:08 作者: rapoo

用C#程序怎么区分A3/A4图像,并把它们各自转成相同大小?
文件夹中有一批A3 和A4图像混着,且各自大小不一,比如两张A3,像素大小也不是完全一样,我想用程序把它们都转成标准的A3/A4大小,该怎么写?
[解决办法]
把图片转换成指定大小格式的文件,也就是自定义格式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace Test.Common
{
/// <summary>
/// 提供图片转换工具
/// </summary>
public static class ImageTransUtility
{

/// <summary>
/// 该函数提供等比转换功能、图片仅进行压缩,不进行裁切.
/// </summary>
/// <param name="sourceFileName"></param>
/// <param name="targetFileName"></param>
/// <param name="maxWidth"></param>
/// <param name="maxHeight"></param>
public static void TranslateByEqualRatio(string sourceFileName, string targetFileName, int maxWidth, int maxHeight)
{
if (maxWidth <= 0
[解决办法]
maxHeight <= 0)
{
throw new ArgumentException("Width And Height Must More than zero");
}

Bitmap fullSizeImg = new Bitmap(sourceFileName);
int width = fullSizeImg.Width;
int height = fullSizeImg.Height;

if (width > maxWidth
[解决办法]
height > maxHeight)
{
if (maxWidth - width < maxHeight - height)
{
decimal ratio = (decimal)height / width;
width = maxWidth;
height = (int)Decimal.Round(Convert.ToDecimal((decimal)maxWidth * (decimal)ratio));
}
else
{
decimal ratio = (decimal)width / height;
height = maxHeight;
width = (int)Decimal.Round(Convert.ToDecimal((decimal)maxHeight * (decimal)ratio));
}
}

var thumbnailBitmap = new Bitmap(width, height);
var thumbnailGraph = Graphics.FromImage(thumbnailBitmap);

thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;


thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;
thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;

var imageRectangle = new Rectangle(0, 0, width, height);
thumbnailGraph.DrawImage(fullSizeImg, imageRectangle);

thumbnailBitmap.Save(targetFileName, ImageFormat.Jpeg);

fullSizeImg.Dispose();
thumbnailGraph.Dispose();
thumbnailBitmap.Dispose();
}

}
}


[解决办法]
图像本身大小是由像素表示的,但这与真实世界的纸张大小不是对应的,所以不存在A3大小的图这样的概念。
想像一下用相机拍照的时候,可以调整焦距,图像的大小是不断变化的。
[解决办法]
是不是只是需要计算出对应的dpi就可以了,根据像素和所需的size
using (Bitmap bitmap = (Bitmap)Image.FromFile("file.jpg"))
{
using (Bitmap newBitmap = new Bitmap(bitmap))
{
newBitmap.SetResolution(300, 300);
newBitmap.Save("file300.jpg", ImageFormat.Jpeg);
}
}

[解决办法]
引用:
我的图像是300DPI
当分辨率为300像素/英寸时,A4大小是2479*3508像素;A3是 3508*4961

可我不知怎么判断是A3还是A3的
有一幅300DPI的图像是4130*5835,明明是A4的,可尺寸为何比A3的像素还大?

一共有三个系数如果不想更改pixel数量那就需要更改分辨率,用上面的代码更改对应的dpi不可以么?
[解决办法]
某一边上的像素数量(个)/分辨率—PI)=尺寸(英寸)
所以你可以通过调整像素数量或分辨率的方法来控制尺寸。如果想保证图像质量,尽量使用后者
[解决办法]
A3是29.7x42cm,也就是11.7x16.5inch(每英寸2.54cm),如果是200dpi,则是2340x3300像素,如果是300dpi,则是3510x4950像素,如果接近这两种像素范围的,可以认为是A3纸。

A4是21x29.7cm,也就是8.267x11.692inch(每英寸2.54cm),如果是200dpi,则是1653x2338像素,如果是300dpi,则是2480x3508像素,如果接近这两种像素范围的,可以认为是A4纸。

读书人网 >C#

热点推荐