「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.07.20
XML
カテゴリ: WPFC#.NET


C# WPFを使用して画像を変換する機能を作成する方法について説明します。この例では、画像の形式を変換し、サイズ変更や色調補正などの操作を行う機能を実装します。


## 手順



1. Visual Studioを開きます。

2. `File > New > Project` を選択します。

3. `WPF App (.NET Core)` を選び、プロジェクトを作成します。


### 2. 必要なNuGetパッケージのインストール

画像操作には`System.Drawing.Common`を使用します。このパッケージをインストールします。

1. `Tools > NuGet Package Manager > Manage NuGet Packages for Solution` を選択します。

2. `Browse` タブで `System.Drawing.Common` を検索し、インストールします。


### 3. XAMLでUIをデザイン

`MainWindow.xaml`に簡単なUIを追加します。


```xml

<Window x:Class="ImageConverter.MainWindow"

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

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

        Title="Image Converter" Height="350" Width="525">

    <Grid>

        <StackPanel Margin="10">

            <Button Name="btnLoadImage" Content="Load Image" Click="btnLoadImage_Click" Margin="0,0,0,10"/>

            <Image Name="imgDisplay" Height="200" Margin="0,0,0,10"/>

            <Button Name="btnConvert" Content="Convert Image" Click="btnConvert_Click"/>

        </StackPanel>

    </Grid>

</Window>

```


### 4. 画像変換のロジックを追加

`MainWindow.xaml.cs`にコードを追加します。


```csharp

using System;

using System.Drawing;

using System.IO;

using System.Windows;

using System.Windows.Media.Imaging;

using Microsoft.Win32;


namespace ImageConverter

{

    public partial class MainWindow : Window

    {

        private Bitmap originalBitmap;


        public MainWindow()

        {

            InitializeComponent();

        }


        private void btnLoadImage_Click(object sender, RoutedEventArgs e)

        {

            OpenFileDialog openFileDialog = new OpenFileDialog

            {

                Filter = "Image files (*.jpg, *.jpeg, *.png) | *.jpg; *.jpeg; *.png"

            };


            if (openFileDialog.ShowDialog() == true)

            {

                originalBitmap = new Bitmap(openFileDialog.FileName);

                imgDisplay.Source = BitmapToImageSource(originalBitmap);

            }

        }


        private void btnConvert_Click(object sender, RoutedEventArgs e)

        {

            if (originalBitmap == null)

            {

                MessageBox.Show("Please load an image first.");

                return;

            }


            SaveFileDialog saveFileDialog = new SaveFileDialog

            {

                Filter = "JPEG Image|*.jpg|PNG Image|*.png"

            };


            if (saveFileDialog.ShowDialog() == true)

            {

                ImageFormat format = ImageFormat.Png;

                if (saveFileDialog.FilterIndex == 1)

                {

                    format = ImageFormat.Jpeg;

                }


                using (var ms = new MemoryStream())

                {

                    originalBitmap.Save(ms, format);

                    File.WriteAllBytes(saveFileDialog.FileName, ms.ToArray());

                }


                MessageBox.Show("Image converted successfully!");

            }

        }


        private BitmapImage BitmapToImageSource(Bitmap bitmap)

        {

            using (MemoryStream memory = new MemoryStream())

            {

                bitmap.Save(memory, ImageFormat.Bmp);

                memory.Position = 0;

                BitmapImage bitmapimage = new BitmapImage();

                bitmapimage.BeginInit();

                bitmapimage.StreamSource = memory;

                bitmapimage.CacheOption = BitmapCacheOption.OnLoad;

                bitmapimage.EndInit();


                return bitmapimage;

            }

        }

    }

}

```


### 5. コードの説明

- `btnLoadImage_Click` メソッドでは、OpenFileDialogを使って画像をロードし、Bitmapオブジェクトとして保持します。

- `btnConvert_Click` メソッドでは、SaveFileDialogを使って保存先とフォーマットを選択し、画像を選択したフォーマットで保存します。

- `BitmapToImageSource` メソッドは、BitmapオブジェクトをWPFのImageコントロールで表示するために、BitmapImageに変換します。


これで、画像をロードし、異なる形式に変換して保存する基本的な機能を持つWPFアプリケーションが完成です。これを基に、さらに機能を追加したり、UIを改善したりすることができます。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.07.20 13:18:18


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: