반응형

 

 

 

 

 

C# Winform program 에서 첫 번째 클래스

기초적인 지식 없이 인터넷의 소스와 참고 자료로만 프로그램 하다 보니 이런일이 발생한다.

 

 

기본 Winform 프로젝트를 만들고 사용자 정의 class를 Form1.cs 소스 내에서 제일 위에 넣었더니 위와 같은 

메시지가 나오면서 폼이 디자이너에서 열리지 않는다. ㅡ.ㅡ;

 

Form1 이 디자인 가능하려면 첫 번째 클래스어야 한다.

Visual Studio 에서 디자이너는 파일의 첫 번째 클래스를 사용해야 합니다.

이렇게 나와있네...

 

아래는 실수로 한 코드 Form1 보다 앞에 두었다. 이와 같이 하면 안 된다. 

 

 

잊어버리지 말고 주의하자.

C# 제대로 공부해야지... ^^

 

 

 

 

 

 

 

 

 

728x90
반응형
반응형

 

 

 

 

 

간단하게 마우스 커서의 위치를 윈도우에서 내가 원하는 위치로 이동하고 싶어서 찾서 구현해 보았다.

 

Move 버튼을 누르면 정해진 500, 500 의 좌표로 마우스 커서가 이동한다.

 

 

아래의 코드를 그대로 적용하면 된다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
using System.Runtime.InteropServices;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
        private const int MOUSEEVENTF_LEFTDOWN = 0x02;
        private const int MOUSEEVENTF_LEFTUP = 0x04;
        private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
        private const int MOUSEEVENTF_RIGHTUP = 0x10;
 
        private Cursor Cursor;
 
        public Form1()
        {
            InitializeComponent();
 
            this.Cursor = new Cursor(Cursor.Current.Handle);
        }
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            int X, Y;
 
            Cursor.Position = new Point(500500);
        }
    }
}
 
 
 
cs

 

 

 

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210314 using System.Threading;  (0) 2021.03.15
210304 C# Winform 첫 번째 클래스  (0) 2021.03.15
210212 OpenCV C# PictureBoxIpl SizeMode  (0) 2021.02.12
210208 C# Barcode reader project (2)  (1) 2021.02.11
210202 C# Barcode reader project (1)  (0) 2021.02.10
반응형

 

 

PictureBoxIpl의 SizeMode 정리.

이미지를 PictureBox에 출력했는데 이미지가 잘려서 나왔다.

그래서 SizeMode를 Zomm으로 조절해서 이미지가 다 나오도록 하였다.

 

SizeMode에 대한 세부 내용을 검색해서 확인해 보았다.

 

 

각각의 설정이 의미하는 아래와 같았다.

 

 

위 필드 내용에 대한 자세한 내용은 아래 링크 참조.

 

 

PictureBoxSizeMode 열거형 (System.Windows.Forms)

PictureBox 내에 이미지가 놓이는 방식을 지정합니다.Specifies how an image is positioned within a PictureBox.

docs.microsoft.com

실제 SizeMode에 따라 적용되는 내용을 확인해 보았다.

 

 

제일 왼쪽 부터.

 

Zoom, Normal, StretchImage, AutoSize, CenterImage

 

 

아래와 같이 다시 정리해 보았다.

 

Zoom : 컨트롤의 크기에 맞게 전체 이미지가 조절된다. 비율을 유지하면서

Nomal : 이미지가 컨트롤의 크기보다 크면 컨트롤의 크기만큼 표시되고 잘린다.

StretchImage : 이미지가 컨트롤에 맞게 늘어나거나 줄어든다.

AutoSize : 이미지크기에 맞게 컨트롤의 크기가 변경된다.

CenterImage : 이미지가 컨트롤의 가운데 배치되고 나머지 영역은 잘린다.

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210304 C# Winform 첫 번째 클래스  (0) 2021.03.15
210307 C# 커서위치 제어 프로그램  (0) 2021.03.07
210208 C# Barcode reader project (2)  (1) 2021.02.11
210202 C# Barcode reader project (1)  (0) 2021.02.10
210202 OpenCV PictureBoxlpl  (0) 2021.02.09
반응형

 

 

지금까지 바코드의 값을 읽는 것까지 되었다.

이제는 이미지에서 바코드가 있는 위치를 얻어서 표시를 하고 싶어졌다.

그래서 바코드의 위치를 찾는 방법을 알아보았다.

 

아래에 그 예제 코드를 추가하였다.

result.ResultPoints의 값을 이용해 barcode의 위치를 얻을 수 있다.

[0].X, [0].Y : Top left

[2].X, [2].Y : Bottom right

 

이 위치를 이용하여 Rectangle로 이미지에 위치를 표시하였다.

 

그리고 pictureBoxIplImage의 Image를 update 하여 화면에 표시하였다.

 

using OpenCvSharp;
using ZXing;

private void btnBarcode_Click(object sender, EventArgs e)
{
  src = Cv2.ImRead("c:\\tmp\\inkscape.png", ImreadModes.Color);
  pictureBoxIplImage.ImageIpl = src;
  BarcodeReader reader = new BarcodeReader();
  Result result = reader.Decode((Bitmap)pictureBoxIplImage.Image);
  if (result != null)
  {
    decoded = "Decode : " + result.ToString() + "\r\nType : " + result.BarcodeFormat.ToString();

    // Get Barcode position 
    decoded += "\r\n" + (int)result.ResultPoints[0].X + ", " + (int)result.ResultPoints[0].Y;
    decoded += "\r\n" + (int)result.ResultPoints[2].X + ", " + (int)result.ResultPoints[2].Y;

    // Barcode position display
    Cv2.Rectangle(src, new Rect((int)(result.ResultPoints[0].X), (int)(result.ResultPoints[0].Y),
      (int)(result.ResultPoints[2].X - result.ResultPoints[0].X), (int)(result.ResultPoints[2].Y - result.ResultPoints[0].Y)),
      Scalar.Blue, 10, LineTypes.Link4);

    // PictureBoxIpl update
    pictureBoxIplImage.ImageIpl = src;
    
    if (decoded != "")
    { 
      textBoxResult.Text = decoded;
    } 
  } 
}

 

 

아래와 같이 파란색으로 바코드의 위치를 표시하게 된다.

 

 

 

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210307 C# 커서위치 제어 프로그램  (0) 2021.03.07
210212 OpenCV C# PictureBoxIpl SizeMode  (0) 2021.02.12
210202 C# Barcode reader project (1)  (0) 2021.02.10
210202 OpenCV PictureBoxlpl  (0) 2021.02.09
210128 Pdf2Image winform project (4)  (0) 2021.02.07
반응형

 

 

Image에서 Barcode를 인식하는 프로그램을 구현해 보았다.

Barcode가 있는 이미지를 만들기 위해 InkScape를 이용하였다.

 

kgkang.tistory.com/146?category=422967

 

210204 잉크스케이프 바코드 생성

잉크스케이프(Inkscape)에서 바코드를 생성하는 방법. 바코드가 있는 PDF 문서를 생성하기 위해 바코드를 생성하기 위해 바코드 생성 메뉴를 찾았다. "확장기능 >> 렌더 >> 바코드" 에서 원하는 바코

kgkang.tistory.com

 

바코드 인식은 ZXing 라이브러리를 사용하였다.

그래서 Nuget으로 ZXing 라이브러리를 설치한다.

 

 

ZXing.Net 이 설치되었다.

 

 

Barcode 버튼을 만들고 코드를 추가한다.

pictureBoxlpl의 이름을 아래와 같이 지정하고 코딩하였다.

 

 

아래와 같이 코딩하여 간단히 바코드를 인식할 수 있다.

이미지를 읽고 표시할 때는 OpenCV를 사용하였다.

 

using OpenCvSharp;
using ZXing;

private void btnBarcode_Click(object sender, EventArgs e)
{
  src = Cv2.ImRead("c:\\tmp\\inkscape.png", ImreadModes.Color);
  pictureBoxIplImage.ImageIpl = src;
  BarcodeReader reader = new BarcodeReader();
  Result result = reader.Decode((Bitmap)pictureBoxIplImage.Image);
  if (result != null)
  {
    decoded = "Decode : " + result.ToString() + "\r\nType : " + result.BarcodeFormat.ToString();
    if (decoded != "")
    { 
      textBoxResult.Text = decoded;
    } 
  } 
  else 
    MessageBox.Show("바코드나 QR코드를 비추세요!");
}

 

아래 이미지는 실제 사용한 코드를 화면 캡춰한 것이다.

 

 

아래와 같이 바코드가 인식되어 출력된다. 

바코드의 내용은 Inkscape, Type은 DATA_MATRIX 이다.

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210212 OpenCV C# PictureBoxIpl SizeMode  (0) 2021.02.12
210208 C# Barcode reader project (2)  (1) 2021.02.11
210202 OpenCV PictureBoxlpl  (0) 2021.02.09
210128 Pdf2Image winform project (4)  (0) 2021.02.07
210126 Pdf2Image winform project (3)  (0) 2021.02.05
반응형

 

 

OpenCV PictureBoxlpl 설치.

 

바코드 인식 프로그램을 구현하기 위해 찾던 중 Zxing을 알게 되었다.

이것을 사용하는 C# 예제를 검색하니 OpenCV 가 필요해서 우선 OpenCV 부터 설치했다.

 

NuGet 패키지 관리자에서 OpenCvSharp4를 검색하여 설치.

 

 

가장 최신 버전 이라서 설치했다.

 

 

그런데 설치를 해도 원하는 PictureBoxlpl 도구가 나오지 않았다.

 

그래서 OpenCV를 다시 검색해서 OpenCVSharp3-AnyCPU를 설치.

 

 

설치가 완료되었다.

 

 

Winform을 연 상태에서 도구상자를 선택하니 OpenCVSharp.UserInterface가 등록되어 있다.

참고로 소스가 열린 상태에서 도구상자를 선택하면 도구가 나타나지 않는다.

 

 

PictureBoxlpl 도구를 선택하여 Winform에 배치해 보았다.

이제 OpenCV를 사용할 준비가 되었다. ^^

 

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210208 C# Barcode reader project (2)  (1) 2021.02.11
210202 C# Barcode reader project (1)  (0) 2021.02.10
210128 Pdf2Image winform project (4)  (0) 2021.02.07
210126 Pdf2Image winform project (3)  (0) 2021.02.05
210125 Pdf2Image winform project (2)  (0) 2021.02.01
반응형

 

 

Pdf2Image source를 적용하여 많은 page의 pdf file을 변환하다가 문제점이 발견되었다.

메모리가 소모가 지속적으로 증가하는 것이였다.

작은 page의 PDF file을 변환할 때는 메모리가 증가해도 그다지 문제가 되지 않았으나,

많은 page의 PDF file을 변환할 때는 1GB 이상으로 지속적으로 메모리 소모가 증가되었다.

 

그래서 소스를 확인하고 수정을 해 보았다.

여러번의 시행착오 끝에 아래와 같이 수정하니 메모리의 할당과 해제가 반복되면서 메모리의 증가 현상이 해결되었다.

 

ProcessPDF2Filesystem 함수의 내부에서 image를 얻는 부분과 파일로 image를 저장하는 부분을 아래와 같이 수정하였다.

 

GetPDFImage 함수를 호출하지 않고 그 내용을 그대로 가져와서 사용하고,

사용한 후의 image와 pdFiumBitmap을 Dispose 하여

메모리의 증가 현상을 해결하였다.

 

 

참고로 아래는 원래 호출하여 사용하던 GetPDFImage 함수의 내용이다. 

 

 

아래는 많은 pdf page의 데이터를 변환하는 과정에서의 메모리 변화이다.

 

 

아래는 약 3만 page의 변환을 끝내고 난 뒤의 메모리 상태이다. 

구세대 i5, 8GB RAM의 노트북에서 약 79분 걸렸다. ㅡ.ㅡ; 

 

 

이제 이 라이브러리를 어느 정도 사용할 수 있을 정도가 된 것 같다.

 

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210202 C# Barcode reader project (1)  (0) 2021.02.10
210202 OpenCV PictureBoxlpl  (0) 2021.02.09
210126 Pdf2Image winform project (3)  (0) 2021.02.05
210125 Pdf2Image winform project (2)  (0) 2021.02.01
210124 Pdf2Image winform project (1)  (0) 2021.01.31
반응형

 

 

이번에는 Pdf2Image로 이미지 파일을 만들 때 크기를 변경하는 방법

 

Pdf2Image로 이미지를 만들었을 때 이미지의 크기가 그렇게 많이 커지지 않았다.

이미지 편집 프로그램 GIMP 으로 PDF를 열었을 때에는 resolution의 값으로 크기를 조절할 수 있었다.

 

 

Pdf2Image는 scale로 크기를 조절할 수 있다. 

그런데 이 값이 1, 2, 3 밖에 없다.

그래서 이 값을 임의로 바꾸어 보았다. 그랬더니 이미지크기가 더 크게 변했다.

 

 

소스를 따라가 보면, WriteImage에서 Scale 을 파라미터로 준다.

 

 

함수를 계속 따라가 보면 GetPdfImage 에서 Scale의 값이 resolution으로 이미지의 크기에 곱해지는 것을 알 수 있다.

 

 

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210202 OpenCV PictureBoxlpl  (0) 2021.02.09
210128 Pdf2Image winform project (4)  (0) 2021.02.07
210125 Pdf2Image winform project (2)  (0) 2021.02.01
210124 Pdf2Image winform project (1)  (0) 2021.01.31
210122 C# Pdf to Image program source (Pdf2Image)  (0) 2021.01.24

+ Recent posts