반응형

 

C#의 기본 제공 라이브러리를 이용한 이미지 읽기/출력 (openCV 없이)

1. 이미지 관련 클래스

뭔가 중구난방이란 느낌이 든다..
1) BitmapImage Class: 이미지를 비트맵으로 읽어와서 C#에서 작업 가능하게 해주는 클래스, 
-.using System.Windows.Controls;
2) ImageDrawing Class: 이미지에 대한 기본적인 작업을 가능하게 해주는 클래스
-.  System.Windows.Media;
3) Image Class: C#에서 이미지 입/출력을 가능하게 해주는 클래스, 굳이 BitmapImage로 로드를 안해도 된다. 
-. using System.Windows.Controls;

2. 예제코드

1) XAML

<Window x:Class="study2_image_CSharp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:study2_image_CSharp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid x:Name="RootGrid">
        <TextBox x:Name="TB_FileName" Text="fileName" Margin="100,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
        <Button x:Name="Btn_ImageProcess" Content="이미지로딩" Margin="200,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="Btn_ImageProcess_Click"/>
        
        <Label Content="width:" Margin="400,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
        <Label Content="height:" Margin="400,120,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
        <Label x:Name="LB_ImgWidth" Content="0" Margin="450,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="30" HorizontalContentAlignment="Right"/>
        <Label x:Name="LB_ImgHeight" Content="0" Margin="450,120,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="30" HorizontalContentAlignment="Right"/>
        <Label Content="px" Margin="470,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
        <Label Content="px" Margin="470,120,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>


    </Grid>
</Window>

2) Code

BitmapImage img = new BitmapImage(); //그림파일 담을 객체 선언
        ImageDrawing imageDrawing = new ImageDrawing(); //그림 표현할 객체 선언


        string uriString; //그림 주소


        private void Btn_ImageProcess_Click(object sender, RoutedEventArgs e)
        {
            Console.WriteLine(Directory.GetCurrentDirectory());
            uriString = Directory.GetCurrentDirectory() + "\\" + TB_FileName.Text; //파일경로 생성

            Console.WriteLine(uriString);

            img.BeginInit(); 
            img.UriSource = new Uri(uriString); //파일 경로 지정
            img.EndInit(); 

            //mainwindow창에 파일크기 표시
            LB_ImgHeight.Content = img.Height;
            LB_ImgWidth.Content = img.Width;


            imageDrawing.Rect = new Rect(0, 0, img.Width, img.Height); //크기 설정
            imageDrawing.ImageSource = img; //표현될 그림 입력
            
            Image imageControl = new Image();
            imageControl.Stretch = Stretch.None;
            imageControl.Source = img;

            Border imageBorder = new Border();

            imageBorder.BorderBrush = Brushes.Gray;
            imageBorder.BorderThickness = new Thickness(1);
            imageBorder.HorizontalAlignment = HorizontalAlignment.Left;
            imageBorder.VerticalAlignment = VerticalAlignment.Top;
            imageBorder.Margin = new Thickness(50,200,0,0);
            imageBorder.Child = imageControl;


            Console.WriteLine(RootGrid.Children.Count);

            RootGrid.Children.Add(imageBorder);

            Console.WriteLine(RootGrid.Children.Count);

        }

 

3. 출력 결과

1) 초기 화면

2) 출력 화면

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기