반응형
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
반응형
'C#' 카테고리의 다른 글
user32.dll + listbox - 프로세스 목록 정렬/선택 (0) | 2021.10.19 |
---|---|
[C#] Thread - 반복실행, Timer (0) | 2020.11.26 |
[OpenCV] OpenCvSharp4 - 캡쳐 화면 클릭해서 좌표 얻기 (0) | 2020.11.05 |
[C#] Thread - thread 지정 + 상태확인 (0) | 2020.11.01 |
[C#] 화면캡쳐 + 출력 (OpenCvSharp4) (0) | 2020.10.22 |
최근댓글