__Radik__ Ответов: 1

Проблема с восстановить.dll & canon MF 3228


Я искал способ сканирования с помощью .net. Нашел такой скрипт
Этот скрипт корректно работает с Brother 7057 и Canon MF 3228


Option Explicit
 
Const ScannerDeviceType = 1
Const ColorIntent = 1
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
 
 
Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice
 
Dim objImageFile
Dim objImageProcess
 
Dim strPath2Save
Dim strFormat
Dim intQuality
Dim intDPI
Dim intHorizontalSize
Dim intVerticalSize
 
strPath2Save      = "D:\MyImage.jpg"      ' Полное имя файла для сохранения
strFormat         = wiaFormatJPEG         ' Формат файла — *.jpg
intQuality        = 85                    ' Качество jpg
intDPI            = 150                   ' Разрешение — 150 dpi
 
Set objDeviceManager = WScript.CreateObject("WIA.DeviceManager")
Set objDeviceInfos = objDeviceManager.DeviceInfos
 
If objDeviceInfos.Count > 0 Then

     Set objDevice = WScript.CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)
    If Not objDevice Is Nothing Then
        With objDevice
            With .Items(1)
                With .Properties
                    .Item("6146").Value = ColorIntent             
                    .Item("6147").Value = intDPI                  
                    .Item("6148").Value = intDPI                  
                    .Item("6149").Value = 0                       
                    .Item("6150").Value = 0                       
                    .Item("6151").Value = 1240
                    .Item("6152").Value = 1748
                End With
                
                Set objImageFile = .Transfer()
                
                
                Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")
                
                With objImageProcess
                    With .Filters
                        .Add objImageProcess.FilterInfos("Convert").FilterID
                        
                        With .Item(1).Properties
                            .Item("FormatID").Value = strFormat
                            .Item("Quality").Value  = intQuality
                        End With
                    End With
                    
                    Set objImageFile = .Apply(objImageFile)
                End With
            End With
        End With

        With WScript.CreateObject("Scripting.FileSystemObject")
            If .FileExists(strPath2Save) Then
                .DeleteFile strPath2Save
            End If
        End With
        
        objImageFile.SaveFile strPath2Save
        
        WScript.Echo "Complete."
        
        Set objDevice = Nothing
    Else
        WScript.Echo "Cancel scanning by user"
    End If
Else
    WScript.Echo "No connected devices"
End If
 
Set objDeviceManager = Nothing
Set objDeviceInfos   = Nothing
 
WScript.Quit 0


Перевел эту суму на vb.net

С Broteher 7057 все работает нормально
С помощью Canon MF 3228 при попытке сканирования в цвете вы получаете черно-белое изображение со всей сканируемой областью (1240x1748), а при попытке сканирования в оттенках серого вы получите серый рисунок, но половину области сканирования (620x874)

Пожалуйста, помогите мне решить мою проблему

ПС
Английский - это не мой первый язык, извините
Для работы это в vb.net нужда wiaaut.dll


ПСС
Код на vb.net
Public Sub Scan()
        Const ScannerDeviceType = 1
        Const ColorIntent = 1
        Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"

        Dim strPath2Save As String = "D:\MyImage.jpg"      
        Dim strFormat As String = wiaFormatJPEG         
        Dim intQuality As Integer = 85                  
        Dim intDPI As Integer = 150                   
        Dim intHorizontalSize As Integer = 1240 
        Dim intVerticalSize As Integer = 1748 


        Dim objDeviceManager As WIA.DeviceManager = CreateObject("WIA.DeviceManager")
        Dim objDeviceInfos = objDeviceManager.DeviceInfos

        If objDeviceInfos.Count > 0 Then

            Dim objDevice = CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)

            If Not objDevice Is Nothing Then
                objDevice.Items(1).Properties.Item("6146").Value = ColorIntent
                objDevice.Items(1).Properties.Item("6147").Value = intDPI
                objDevice.Items(1).Properties.Item("6148").Value = intDPI
                objDevice.Items(1).Properties.Item("6149").Value = 0
                objDevice.Items(1).Properties.Item("6150").Value = 0
                objDevice.Items(1).Properties.Item("6151").Value = intHorizontalSize
                objDevice.Items(1).Properties.Item("6152").Value = intVerticalSize

                Dim objImageFile As WIA.ImageFile = objDevice.Items(1).Transfer()
                Dim objImageProcess As WIA.ImageProcess = CreateObject("WIA.ImageProcess")

                'objImageProcess.Filters.FilterInfos("Convert").FilterID()

                'objImageProcess.Item(1).Properties.Item("FormatID").Value = strFormat
                'objImageProcess.Item(1).Properties.Item("Quality").Value = intQuality


                ' objImageFile = objImageProcess.Apply(objImageFile)


                If CreateObject("Scripting.FileSystemObject").FileExists(strPath2Save) Then
                    CreateObject("Scripting.FileSystemObject").DeleteFile(strPath2Save)
                End If


                objImageFile.SaveFile(strPath2Save)

                objDevice = Nothing
            Else
            End If
        Else
        End If

        objDeviceManager = Nothing
        objDeviceInfos = Nothing


    End Sub


Что я уже пробовал:

1) я позвонил в техническую поддержку Canon, но они не занимаются такими проблемами
2) Если вы запускаете скрипт как файл scan.vbs из самой программы, он работает, но обратной связи от программы нет, и во время процесса сканирования может появиться много других ошибок.

Richard Deeming

Если проблема заключается в вашем VB.NET перевод кода, тогда почему вы не показали нам этот код?

Нажмите кнопку "улучшить вопрос" и добавьте VB.NET версия вашего кода к вопросу.

__Radik__

Добавить vb.net код

Richard Deeming

Очевидным местом для начала был бы код "фильтров", который присутствует в вашем VBScript, но закомментирован в вашем VB.NET код.

__Radik__

Поверьте мне на полу, что фильтр здесь не важен, это не причина. Я хочу попробовать изменить код так, чтобы настройки параметров сканирования выбирались пользователем через стандартный интерфейс wia. Но только вечером я могу это сделать.



Я сделал это!
Все работает.
Сканирование в цветном режиме.
Но в этой версии программы появилось дополнительное диалоговое окно от WIA с выбором параметров сканирования.
Но вы можете сохранить эти параметры в глобальную переменную и использовать ее без диалогового окна из WIA на протяжении всей работы программы - до тех пор, пока программа не закроется.


Тем не менее я обратился с этим вопросом в службу технической поддержки Canon. И знаете, что они мне сказали?
"Ваш принтер Canon MF3228 не является сетевым". с уважением, Canon.

Что значит "сеть - не Сеть"?

Я написал им об ошибке при сканировании через vb.net

а они мне отвечают: "ваш принтер не подключен к сети"
никаких слов, только эмоции...

Karthik_Mahalingam

использовать  Ответить  кнопка, чтобы отправить комментарии/запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

__Radik__

Спасибо

Karthik_Mahalingam

Добро пожаловать. Позаботьтесь о дальнейших постах

1 Ответов

Рейтинг:
7

__Radik__

 Private WiaItem As WIA.Item = Nothing

Private Sub Scan_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            Dim CommonDialog12 As New WIA.CommonDialog
            Dim Device12a As WIA.Device = CommonDialog12.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, False, False)
            For i As Integer = 0 To 35 '35-Properties count'
                Try
                    If Device12a.Properties.Item(i).Value.ToString.Contains("Canon") Then
                        WiaItem = Device12a.Items(1) 'WiaItem - Global var'
                        CommonDialog12.ShowItemProperties(WiaItem, False)
                        Exit For
                    End If
                Catch ex As Exception
                End Try
            Next
        Catch ex As Exception
            MsgBox("Check scaner or USB")
            Me.Close()
        End Try
    End Sub

 Private Sub scan(Color As Integer, x2 As Integer, y2 As Integer, DPI As Integer, Optional W As Integer = 1, Optional H As Integer = 1) 'W=1 H=2
        
        Try
            Dim CommonDialog1 As New WIA.CommonDialog
            Dim Device1a As WIA.Device = CommonDialog1.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, False, False)
            Dim newItem As WIA.Item = Device1a.Items(1)
            If WiaItem IsNot Nothing Then
                newItem = WiaItem 'If Canon'
            End If
............
end sub




У меня есть вопрос: можно ли каким-то образом сохранить этот WiaItem в файл или реестр или что-то в этом роде, чтобы сразу же использовать его без дополнительного диалогового окна?