scanning under windows WIA with custom settings (dpi / etc )

News123 news123 at free.fr
Sat Nov 28 16:11:18 EST 2009


r wrote:
> more *maybe useful dump?
> 
>>>> for i in dev.Items:
> 	for p in i.Properties:
> 		if not p.IsReadOnly:
> 			print p.Name, '->', p.Value
> 
. . .
> Horizontal Resolution -> 200
> Vertical Resolution -> 200
> Horizontal Start Position -> 0
. . .
> 
> Now how to set the values... hmmm?
> 

How to set the values? This is THE magic question.

At least I found out how to set the values in C# :

foreach (Property prop in item.Properties){
    if (prop.IsReadOnly) continue;
    if (prop.Name == "Horizontal Resolution")
    {
         IProperty iprop = (IProperty)prop;
         Object val = 75;
         iprop.set_Value(ref val);
    }
}



Below my most recent complete script:
(still not able to set params, though I can with C#)

import win32com.client, os

WIA_COM = "WIA.CommonDialog"
WIA_IMG_FORMAT_PNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
WIA_COMMAND_TAKE_PICTURE="{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"

def takePictureOrNot(dev): # cameras have to call TakePicture
    for command in dev.Commands:
        if command.CommandID==WIA_COMMAND_TAKE_PICTURE:
            print "take PICK"
            foo=dev.ExecuteCommand(WIA_COMMAND_TAKE_PICTURE)

def setImgProps(item): # here scan properties should be set
    for prop in item.Properties:
        if prop.IsReadOnly: continue
        if(prop.Name == "Horizontal Resolution"):
            res = 250
            print "trying to set",prop.Name,prop,"to ",res
            ### unfortunately the next line (if uncommented) fails
            #prop.set_Value(res)

def transferImg(dev): # set properties and scan image
    i=1
    image = None
    for item in dev.Items:
        if i==dev.Items.Count:
            setImgProps(item)
            image=item.Transfer(WIA_IMG_FORMAT_PNG)
            break
        i=i+1
    return image

def scan_image_wia():
    wia = win32com.client.Dispatch(WIA_COM) #  CommonDialog object
    dev = wia.ShowSelectDevice()
    takePictureOrNot(dev)
    image = transferImg(dev)
    return image

image = scan_image_wia()
fname = 'wia-test.jpg'
if os.path.exists(fname):
    os.remove(fname)
image.SaveFile(fname)


bye

N





More information about the Python-list mailing list