ketan Ram Patil Ответов: 1

Как преобразовать этот код сканера C# код в WPF VB


Я хочу преобразовать этот код C# в WPF vb

я также использовал веб-сайт, как converter.telerik.com его преобразуют, но какой-то код неверен.

поэтому, пожалуйста, помогите мне преобразовать этот код, я новичок в WPF VB и C# также.


заранее спасибо.

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

Вот код xaml.
<Window x:Class="TestAppWpf.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="TestAppWpf" Height="450" Width="500">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <StackPanel>
      <GroupBox Header="Source">
        <StackPanel>
          <RadioButton 

            Name="SourceFromTwainUI" 

            IsChecked="True">
            Use TWAIN UI
          </RadioButton>
          <Button 

            Margin="5"             

            IsEnabled="{Binding ElementName=SourceFromTwainUI, Path=IsChecked}"                         

            Click="OnSelectSourceButtonClick">
            Select Source
          </Button>
          <RadioButton Name="SourceUserSelected">Manual source</RadioButton>
          <ComboBox Name="ManualSource" IsEnabled="{Binding ElementName=SourceUserSelected, Path=IsChecked}" />
        </StackPanel>
      </GroupBox>
 
      <Button Margin="5" Name="ScanButton" Click="scanButton_Click">Scan</Button>
      
      <Separator />
 
      <CheckBox Margin="5" Name="UseAdfCheckBox">Use ADF</CheckBox>
      <CheckBox Margin="5" Name="UseDuplexCheckBox">Use Duplex</CheckBox>
 
      <Separator />
 
      <CheckBox Margin="5" Name="UseUICheckBox">Use UI</CheckBox>
      <CheckBox Margin="5" Name="ShowProgressCheckBox">Show Progress</CheckBox>
 
      <Separator />
 
      <CheckBox Margin="5" Name="BlackAndWhiteCheckBox">B & W</CheckBox>
      <CheckBox Margin="5" Name="GrabAreaCheckBox">Grab Area</CheckBox>
 
      <Separator />
 
      <CheckBox Margin="5" Name="AutoDetectBorderCheckBox">Auto Detect Border</CheckBox>
      <CheckBox Margin="5" Name="AutoRotateCheckBox">Auto Rotate</CheckBox>
 
      <Separator />
 
      <Button Margin="5" Click="OnSaveButtonClick">Save</Button>
    </StackPanel>
    <Border Grid.Column="1" BorderThickness="3, 0, 0, 0" BorderBrush="Gray">
      <Image Margin="5" Name="MainImage" Stretch="UniformToFill" />
    </Border>
  </Grid>
</Window>

and code behind C# code is : =

using System;
using System.Drawing;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Interop;
using Microsoft.Win32;
using TwainDotNet;
using TwainDotNet.TwainNative;
using TwainDotNet.Wpf;
using TwainDotNet.Win32;

namespace TestAppWpf
{
public partial class Window1 : Window
{
private static AreaSettings AreaSettings = new AreaSettings(Units.Centimeters, 0.1f, 5.7f, 0.1F + 2.6f, 5.7f + 2.6f);

private Twain _twain;
private ScanSettings _settings;

private Bitmap resultImage;

public Window1()
{
InitializeComponent();

Loaded += delegate
{
_twain = new Twain(new WpfWindowMessageHook(this));
_twain.TransferImage += delegate(Object sender, TransferImageEventArgs args)
{
if (args.Image != null)
{
resultImage = args.Image;
IntPtr hbitmap = new Bitmap(args.Image).GetHbitmap();
MainImage.Source = Imaging.CreateBitmapSourceFromHBitmap(
hbitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
Gdi32Native.DeleteObject(hbitmap);
}
};
_twain.ScanningComplete += delegate
{
IsEnabled = true;
};

var sourceList = _twain.SourceNames;
ManualSource.ItemsSource = sourceList;

if (sourceList != null && sourceList.Count > 0)
ManualSource.SelectedItem = sourceList[0];
};
}

private void OnSelectSourceButtonClick(object sender, RoutedEventArgs e)
{
_twain.SelectSource();
}

private void scanButton_Click(object sender, RoutedEventArgs e)
{
IsEnabled = false;

_settings = new ScanSettings
{
UseDocumentFeeder = UseAdfCheckBox.IsChecked,
ShowTwainUI = UseUICheckBox.IsChecked ?? false,
ShowProgressIndicatorUI = ShowProgressCheckBox.IsChecked,
UseDuplex = UseDuplexCheckBox.IsChecked,
Resolution = (BlackAndWhiteCheckBox.IsChecked ?? false)
? ResolutionSettings.Fax
: ResolutionSettings.ColourPhotocopier,
Area = !(GrabAreaCheckBox.IsChecked ?? false) ? null : AreaSettings,
ShouldTransferAllPages = true,
Rotation = new RotationSettings
{
AutomaticRotate = AutoRotateCheckBox.IsChecked ?? false,
AutomaticBorderDetection = AutoDetectBorderCheckBox.IsChecked ?? false
}
};

try
{
if (SourceUserSelected.IsChecked == true)
_twain.SelectSource(ManualSource.SelectedItem.ToString());
_twain.StartScanning(_settings);
}
catch (TwainException ex)
{
MessageBox.Show(ex.Message);
}

IsEnabled = true;
}

private void OnSaveButtonClick(object sender, RoutedEventArgs e)
{
if (resultImage != null)
{
var saveFileDialog = new SaveFileDialog();
if (saveFileDialog.ShowDialog() == true)
resultImage.Save(saveFileDialog.FileName);
}
}
}
}

Graeme_Grant

Пожалуйста, переформатируйте свой код правильно.

1 Ответов

Рейтинг:
2

Graeme_Grant

Я скопировал и вставил приведенный выше код C# в Преобразователь Кодов Телерика[^] и это было прекрасно преобразовано:

Imports System.Drawing
Imports System.IO
Imports System.Windows
Imports System.Windows.Media.Imaging
Imports System.Windows.Interop
Imports Microsoft.Win32
Imports TwainDotNet
Imports TwainDotNet.TwainNative
Imports TwainDotNet.Wpf
Imports TwainDotNet.Win32

Namespace TestAppWpf
	Public Partial Class Window1
		Inherits Window
		Private Shared AreaSettings As New AreaSettings(Units.Centimeters, 0.1F, 5.7F, 0.1F + 2.6F, 5.7F + 2.6F)

		Private _twain As Twain
		Private _settings As ScanSettings

		Private resultImage As Bitmap

		Public Sub New()
			InitializeComponent()

			Loaded += Sub() 
			_twain = New Twain(New WpfWindowMessageHook(Me))
			_twain.TransferImage += Sub(sender As [Object], args As TransferImageEventArgs) If args.Image IsNot Nothing Then
				resultImage = args.Image
				Dim hbitmap As IntPtr = New Bitmap(args.Image).GetHbitmap()
				MainImage.Source = Imaging.CreateBitmapSourceFromHBitmap(hbitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions())
				Gdi32Native.DeleteObject(hbitmap)
			End If
			_twain.ScanningComplete += Sub() IsEnabled = True

			Dim sourceList = _twain.SourceNames
			ManualSource.ItemsSource = sourceList

			If sourceList IsNot Nothing AndAlso sourceList.Count > 0 Then
				ManualSource.SelectedItem = sourceList(0)
			End If

End Sub
		End Sub

		Private Sub OnSelectSourceButtonClick(sender As Object, e As RoutedEventArgs)
			_twain.SelectSource()
		End Sub

		Private Sub scanButton_Click(sender As Object, e As RoutedEventArgs)
			IsEnabled = False

			_settings = New ScanSettings() With { _
				Key .UseDocumentFeeder = UseAdfCheckBox.IsChecked, _
				Key .ShowTwainUI = If(UseUICheckBox.IsChecked, False), _
				Key .ShowProgressIndicatorUI = ShowProgressCheckBox.IsChecked, _
				Key .UseDuplex = UseDuplexCheckBox.IsChecked, _
				Key .Resolution = If((If(BlackAndWhiteCheckBox.IsChecked, False)), ResolutionSettings.Fax, ResolutionSettings.ColourPhotocopier), _
				Key .Area = If(Not (If(GrabAreaCheckBox.IsChecked, False)), Nothing, AreaSettings), _
				Key .ShouldTransferAllPages = True, _
				Key .Rotation = New RotationSettings() With { _
					Key .AutomaticRotate = If(AutoRotateCheckBox.IsChecked, False), _
					Key .AutomaticBorderDetection = If(AutoDetectBorderCheckBox.IsChecked, False) _
				} _
			}

			Try
				If SourceUserSelected.IsChecked = True Then
					_twain.SelectSource(ManualSource.SelectedItem.ToString())
				End If
				_twain.StartScanning(_settings)
			Catch ex As TwainException
				MessageBox.Show(ex.Message)
			End Try

			IsEnabled = True
		End Sub

		Private Sub OnSaveButtonClick(sender As Object, e As RoutedEventArgs)
			If resultImage IsNot Nothing Then
				Dim saveFileDialog = New SaveFileDialog()
				If saveFileDialog.ShowDialog() = True Then
					resultImage.Save(saveFileDialog.FileName)
				End If
			End If
		End Sub
	End Class
End Namespace

Теперь преобразование не является совершенным и потребует настройки (он же отладка). Отладка-это нормальная задача программирования.

Глядя на выводимый VB-код, я вижу одну область, которая нуждается в настройке (не тестировалась):
_settings = New ScanSettings() With { _
	.UseDocumentFeeder = UseAdfCheckBox.IsChecked, _
	.ShowTwainUI = If(UseUICheckBox.IsChecked, False), _
	.ShowProgressIndicatorUI = ShowProgressCheckBox.IsChecked, _
	.UseDuplex = UseDuplexCheckBox.IsChecked, _
	.Resolution = If((If(BlackAndWhiteCheckBox.IsChecked, False)), ResolutionSettings.Fax, ResolutionSettings.ColourPhotocopier), _
	.Area = If(Not (If(GrabAreaCheckBox.IsChecked, False)), Nothing, AreaSettings), _
	.ShouldTransferAllPages = True, _
	.Rotation = New RotationSettings() With { _
		.AutomaticRotate = If(AutoRotateCheckBox.IsChecked, False), _
		.AutomaticBorderDetection = If(AutoDetectBorderCheckBox.IsChecked, False) _
	} _
}

Остальную часть отладки я оставлю вам...


ketan Ram Patil

спасибо за ваш ценный повтор.. :)

Теперь проблема в том, что я не знаю, как преобразовать этот код C#


общественные файл window1()
{
метод InitializeComponent();

Загружено += делегат
{
_twain = новый Твена(новый WpfWindowMessageHook(это));
_двое.TransferImage += делегат(отправитель объекта, TransferImageEventArgs args)
{
если (args.Изображение != null)
{
resultImage = args.Изображение;
IntPtr hbitmap = новое растровое изображение(args.Изображение).GetHbitmap();
Главное изображение.Источник = Изображение.CreateBitmapSourceFromHBitmap(
hbitmap,
Указателя IntPtr.Ноль,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
Gdi32Native.DeleteObject(hbitmap);
}
};
_двое.ScanningComplete += делегат
{
Свойства isenabled = истина;
};

ВАР исходный = _twain.SourceNames;
ManualSource.ItemsSource = sourceList;

if (sourceList != null && sourceList.Count > 0)
ManualSource.SelectedItem = sourceList[0];
};
}
на VB

ketan Ram Patil

Пожалуйста, помогите, я пытался так много раз... но я не могу преобразовать этот код c# в vb :(

ketan Ram Patil

Спасибо за ваш ценный повтор.. Это прекрасно работает.
:)
после отладки я получил ошибку, а также решение...