我正在使用此代码拍摄jpg图像并将其保存为缩略图,但它似乎很慢..
Image thumbNail = image.GetThumbnailImage(width, height, null, new IntPtr());
有没有更快的方法从图像目录生成大量缩略图?
答案 0 :(得分:6)
尝试绘制图像 - 重新编辑
public Image ResizeImage(Image openImage, int NewWidth, int NewHeight) {
var openBitmap = new Bitmap(openImage);
var newBitmap = new Bitmap(NewWidth, NewHeight);
using (Graphics g = Graphics.FromImage(openBitmap))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawImage(newBitmap, new Rectangle(0, 0, NewWidth, NewHeight));
}
openBitmap.Dispose(); //Clear The Old Large Bitmap From Memory
return (Image)newBitmap;
}
典型的3-4mb图像需要4-8ms
答案 1 :(得分:6)
1)到目前为止,创建.Jpg缩略图的最快和最可靠的方法是使用部分解压缩。
Jpg有一个独特的方面,它可以提取原始的1/8大小或1/16大小(或任何2大小的力量)副本,而无需解压缩或采样整个原始图像。
有没有注意到像Picassa或Windows Explorer这样的程序似乎如此超快速地创建缩略图?这就是他们这样做的方式(当它们尚未缓存时)。
基于Independent JPEG Group库代码的任何库中都可以轻松使用此功能,其中大部分都是。例如,ImageMagick可以使用.NET层。
2)您可以使用像libjpeg turbo这样的硬件加速库来进一步提高速度,尽管它可能需要互操作。
3)对此特殊.jpg功能的一些解释是here。
答案 2 :(得分:1)
试一试:
public bool GenerateThumbNail(string fileName, string thumbNailFileName,
ImageFormat format, int height, int width)
{
try
{
using (Image img = Image.FromFile(fileName))
{
Image thumbNail = new Bitmap(width, height, img.PixelFormat);
Graphics g = Graphics.FromImage(thumbNail);
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
Rectangle rect = new Rectangle(0, 0, width, height);
g.DrawImage(img, rect);
thumbNail.Save(thumbNailFileName, format);
}
return true;
}
catch (Exception)
{
return false;
}
}
它也使用DrawImage。