画像ファイルに保存してみよう
バーコードは画面に表示するだけでなく、いろいろと出力もしたいですね。まずは、画像ファイルとして出力してみましょう。
画像データの扱いはプラットフォームごとに異なり、画像ファイルに保存する方法もプラットフォームごとにさまざまです。BarCodeコントロールでも、残念ながらプラットフォーム共通のコードとはいきません。
Windows Forms
Windows FormsのImageクラス(System.Drawing名前空間)は、その画像をファイルに保存するためのSaveメソッドを持っています。そして、BarCodeコントロールは、表示しているバーコードの画像を返すImageプロパティを持っています。ですから、[画像を保存]ボタンのイベントハンドラーで、BarCodeコントロールのImageプロパティのSaveメソッドを呼び出せばいいです。
ファイル保存ダイアログを出してユーザーに保存先を指定してもらい、そこに画像データを書き出すコードは次の通りです(Form1.csファイル)。
private void SaveButton_Click(object sender, EventArgs e) { // ファイル保存ダイアログを出す var saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "PNG Image|*.png"; saveFileDialog.Title = "Save an Image File"; saveFileDialog.DefaultExt = ".png"; saveFileDialog.FileName = "BarCodeControlSample.png"; saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); saveFileDialog.ShowDialog(); if (!string.IsNullOrEmpty(saveFileDialog.FileName)) { // 画像をファイルに保存する this.BarCode1.Image.Save(saveFileDialog.FileName, ImageFormat.Png); } }
WPF
WPF用のBarCodeコントロールは、画像データをストリームに保存するSaveメソッドを持っています。
ファイル保存ダイアログを出してユーザーに保存先を指定してもらい、そこに画像データを書き出すコードは次の通りです(MainWindow.xaml.csファイル)。
private void SaveButton_Click(object sender, RoutedEventArgs e) { // ファイル保存ダイアログを出す var saveFileDialog = new SaveFileDialog(); // ……省略(Windows Formsと同じ)…… if (saveFileDialog.ShowDialog() ?? false) { // 画像をファイルに保存する using (var st = saveFileDialog.OpenFile()) { this.BarCode1.Save(st, C1.WPF.BarCode.ImageFormat.Png); } } }
UWP
UWP用のBarCodeコントロールは、画像データをストリームに保存するSaveAsyncメソッドを持っています。
ファイル保存ダイアログを出してユーザーに保存先を指定してもらい、そこに画像データを書き出すコードは次の通りです(MainPage.xaml.csファイル)。SaveAsyncメソッドは非同期メソッドなので、非同期処理の完了後に再開するためのawait
キーワードが呼び出し部分に、async
キーワードがメソッドのシグネチャに必要です。
private async void SaveButton_Click(object sender, RoutedEventArgs e) { // ファイル保存ダイアログを出す var savePicker = new FileSavePicker(); savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; savePicker.FileTypeChoices.Add("PNG ファイル", new List() { ".png" }); var file = await savePicker.PickSaveFileAsync(); if (file != null) { // 画像をファイルに保存する using (var st = await file.OpenStreamForWriteAsync()) await this.BarCode1.SaveAsync(st, C1.Xaml.BarCode.ImageFormat.Png); } }