实现方法有2个方式:
1。使用image的getthumbnailimage 方法直接生成压缩图片,大概大概如此:
file://设置 原图片 对象的 encoderparameters 对象,设置清晰度
imagecodecinfo ici = getcodecinfo((string)htmimes[mfileextname]);
encoderparameters parameters = new encoderparameters(1);
parameters.param[0] = new encoderparameter(encoder.quality,lngdefinition);
system.drawing.image.getthumbnailimageabort mycallback =new
system.drawing.image.getthumbnailimageabort(thumbnailcallback);
system.drawing.image mythumbnail = image.getthumbnailimage(intnewwidth, intnewheight,
mycallback, intptr.zero);
mythumbnail.save(txtnewpath, ici, parameters);
2。使用graphics 重新绘制图象
imagecodecinfo ici = getcodecinfo((string)htmimes[mfileextname]);
encoderparameters parameters = new encoderparameters(1);
parameters.param[0] = new encoderparameter(encoder.quality,lngdefinition);
bitmap objnewbitmap = new bitmap(intnewwidth, intnewheight, pixelformat.format32bppargb);
//从指定的 image 对象创建新 graphics 对象
graphics objgraphics = graphics.fromimage(objnewbitmap);
//清除整个绘图面并以透明背景色填充
objgraphics.clear(color.transparent);
//在指定位置并且按指定大小绘制 原图片 对象
objgraphics.drawimage(image, new rectangle(0, 0, intnewwidth, intnewheight));
objnewbitmap.save(txtnewpath + txtnewfilename+"."+mfileextname, ici, parameters);
注意lngdefinition是调整清晰度的long型参数,一般50-90 就很清晰了。
因为在使用的时候先是用第一种方法,结果发现把清晰度调得再高都很模糊,后来用第2种方法,发现清晰度为40的时候也很清晰。
小结下吧:
1。2种效果,在清晰度上是graphics 胜出
2。在生成同样宽度,同样清晰度前提下,图片graphics绘制的也比较小,小1/3左右。
如此看来 ms的image的压缩getthumbnailimage 方法 应该不适合在压缩图片上,那适合在什么地方使用呢,希望熟悉的人告诉下哦
新闻热点
疑难解答
图片精选