猫猫在做扫描仪控制的时候,使用的柯达扫描控件,这个控件控制扫描仪非常实用,还带有图片编辑的功能,但问题也有,就是导出的图片体积太小了。
我使用的是MYIMG.FLL,结果发现中能修改长度与宽度,图片长宽改太小,文件体积是够用了,但是图片看不清了。
研究了一下,发现图片的大小,不仅仅取决于图片的长度与宽度,分辨率也很关键。分辨率也就是DPI,我们常用的网页上的图片DPI是72,PHOTOSHOP默认也是72。
PS默认画布
扫描仪却是200-300DPI,所以造成文件体积巨大,MYIMG只能实现获取DPI,不能修改。
经行者孙指点,拿到了这样的函数。
Function saveimage2(openfile As String,savefile As String)
lqEncoderClsID_BMP=0h00F47C55041AD3119A730000F81EF32E &&BMP
lqEncoderClsID_JPG=0h01F47C55041AD3119A730000F81EF32E &&JPG
lqEncoderClsID_GIF=0h02F47C55041AD3119A730000F81EF32E &&GIF
lqEncoderClsID_TIF=0h05F47C55041AD3119A730000F81EF32E &&TIF
lqEncoderClsID_PNG=0h06F47C55041AD3119A730000F81EF32E &&PNG
Declare Long GdipLoadImageFromFile In GDIPlus.Dll String cFile, Long @ nativeImage
Declare Long GdipSaveImageToFile In GDIPlus.Dll Long nativeImage, String cFile, ;
String EncoderClsID, String EncoderParameters
Declare Long GdipDisposeImage In GDIPlus.Dll Long nativeImage
lcInputFile=Strconv(openfile+Chr(0),5)
lcOutputFile=Strconv(savefile+Chr(0),5)
lnImage=0
GdipLoadImageFromFile(lcInputFile,@lnImage)
GdipSaveImageToFile(lnImage, lcOutputFile, Evaluate('lqEncoderClsID_'+Upper(Justext(savefile))), Null)
GdipDisposeImage(lnImage)
Erase &openfile
Endfunc
将柯达控件处理过的图片,用这个函数再保存一下,完美解决文件体积过大的问题。