비트코인 QR 코드
비트코인 QR 코드 생성하기
비트코인 주소는 일반적으로 QR 코드로 표시된다.
C#에서 QR 코드 이미지를 생성하는 방법은 여러가지가 있지만,
여기서는 ZXing.Net 오픈소스 라이브러리를 사용해 본다.
ZXing.Net은 원래 Java로 개발된 바코드 이미지 처리 라이브러리인 ZXing을 .NET 용으로 포팅한 것이다.
ZXing.Net을 사용하기 위해서는 먼저 아래와 같이 ZXing.Net 누겟 패키지를 설치한다.
PM> Install-Package ZXing.Net
.NET Standard/.NET Core/.NET 5/.NET 6 등에서 ZXing.Net (v0.16.7+)을 사용하기 위해서는
추가적으로 ZXing.Net.Bindings.Windows.Compatibility 누겟 패키지를 설치한다.
PM> Install-Package ZXing.Net
PM> Install-Package ZXing.Net.Bindings.Windows.Compatibility
ZXing.Net은 BarcodeWriter 클래스를 사용하여 QR 코드를 생성한다.
먼저 BarcodeWriter 객체를 생성하는데, 이때 Format 속성을 BarcodeFormat.QR_CODE 으로 지정해야한다.
또한 옵션으로 QR 코드 넓이, 높이, Margin 등과 같은 속성들을 Options 속성에 지정할 수 있다.
이러한 설정이 끝났으면, BarcodeWriter 클래스의 Write(텍스트) 메서드를 호출하는데,
이 메서드는 (텍스트) 문자열을 QR 코드에 넣어 QR 코드 이미지를 생성한다.
/*
using System.Drawing;
using System.Windows.Forms;
using ZXing;
using ZXing.QrCode;
*/
// Sample Bitcoin address
string address = "1PJ2er3A8sh2M7S9tGuhxRmRizTM2fCHqU";
string addrFormat = "bitcoin:" + address;
IBarcodeWriter writer = new BarcodeWriter
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Width = 250,
Height = 250
}
};
var qrResult = writer.Write(addrFormat);
Bitmap qrcode = new Bitmap(qrResult);
/*
//Sample UI test in Console project
Form frm = new Form();
PictureBox pic = new PictureBox();
pic.Size = new Size(250, 250);
pic.Image = qrcode;
frm.Controls.Add(pic);
Application.Run(frm);
*/
QR 코드 이미지가 생성된 후, 이는 임의의 이미지 UI 컨트롤에 표시될 수 있다.
위의 샘플 코드에서는 QR 이미지를 윈폼 PictureBox 컨트롤에 표시하고 있다
(주: 위 샘플코드가 콘솔 프로젝트에서 실행된다는 가정하에, Applcation.Run()을 사용하였음).
(.NET Standard/.NET Core/.NET 5/.NET 6) ZXing.Net v0.16.7+ 에서 BarcodeWriter 클래스의 인스턴스를 생성할 때,
아래와 같이 Generic Type T (Bitmap)와 Renderer 속성을 지정해 준다.
/*
using System.Drawing;
using System.Windows.Forms;
using ZXing;
using ZXing.QrCode;
using ZXing.Windows.Compatibility;
*/
// Sample Bitcoin address
string address = "1PJ2er3A8sh2M7S9tGuhxRmRizTM2fCHqU";
string addrFormat = "bitcoin:" + address;
var writer = new BarcodeWriter<Bitmap>
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Width = 200,
Height = 200,
Margin = 1
},
Renderer = new BitmapRenderer()
};
Bitmap qrcode = writer.Write(addrFormat);