Cách Chuyển đổi Hình ảnh RGB Sang Văn Bản

Cách Chuyển đổi Hình ảnh RGB Sang Văn Bản
Cách Chuyển đổi Hình ảnh RGB Sang Văn Bản

Video: Cách Chuyển đổi Hình ảnh RGB Sang Văn Bản

Video: Cách Chuyển đổi Hình ảnh RGB Sang Văn Bản
Video: Cách chuyển nội dung hình ảnh thành văn bản giống 100% 2024, Tháng mười một
Anonim

Mỗi pixel của hình ảnh bmp mang thông tin về màu của nó từ mô hình RGB (mô hình màu của hình ảnh, bao gồm ba thành phần R - đỏ, G - xanh lá cây, B - xanh lam). Sẽ thuận tiện hơn khi lưu trữ giá trị màu RGB ở định dạng hex (hệ thập lục phân), trong đó giá trị của mỗi thành phần nằm trong phạm vi 00… FF. Sự kết hợp 000000 tương ứng với màu đen, FFFFFF - sang màu trắng.

Cách chuyển đổi hình ảnh RGB sang văn bản
Cách chuyển đổi hình ảnh RGB sang văn bản

Để bắt đầu, hãy mở không gian tên Bản vẽ:

sử dụng System. Drawing;

Hãy tạo một phiên bản mới của lớp Bitmap:

Bitmap bmp = new Bitmap ("c: / 1.bmp") / / c: / 1.bmp - địa chỉ hình ảnh

Để lưu trữ giá trị màu pixel, bạn có thể tạo một cấu trúc riêng biệt, có các trường là các thành phần RGB, nhưng tôi quyết định sử dụng lớp Màu từ không gian tên Bản vẽ. Để lấy màu, chúng ta sử dụng phương thức GetPixel (x, y), trong đó x, y là tọa độ của pixel ảnh. Nếu bạn muốn sử dụng cấu trúc của riêng mình để lưu trữ màu, thay vì một thể hiện của lớp Màu, thì bạn có thể sử dụng phương thức bmp. GetPixel (x, y).x để nhận một thành phần RGB duy nhất, trong đó x là R, G hoặc B.

Color [,] color = new Color [bmp. Width, bmp. Height];

for (int y = 0; y <bmp. Height; y ++)

for (int x = 0; x <bmp. Width; x ++)

{

color [x, y] = bmp. GetPixel (x, y);

}

Để ghi giá trị màu vào tệp, chúng tôi sử dụng lớp StreamWriter. Vì các phần tử R, G, B của cá thể Màu có kiểu byte, chúng tôi chuyển đổi chúng bằng cách sử dụng phương thức ToString ("X2") thành kiểu chuỗi sẽ lưu trữ các giá trị hex của các phần tử RGB.

StreamWriter steamWriter = new StreamWriter ("c: / 1.txt");

for (int y = 0; y <bmp. Height; y ++)

{

for (int x = 0; x <bmp. Width; x ++)

{

steamWriter. Write (color [x, y]. R. ToString ("X2"));

steamWriter. Write (color [x, y]. G. ToString ("X2"));

steamWriter. Write (color [x, y]. B. ToString ("X2") + ");

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Bây giờ chúng ta hãy thực hiện thao tác ngược lại - chuyển đổi tệp văn bản kết quả thành hình ảnh.

Với sự trợ giúp của StreamReader, chúng tôi đọc thông tin từ tệp.

StreamReader txtFile = new StreamReader ("c: / 1.txt");

Chúng tôi tính toán chiều rộng và chiều cao của hình ảnh. Vì mỗi pixel có 6 ký tự và 1 khoảng trống và không có khoảng trống ở cuối, chúng tôi sử dụng công thức sau để tính chiều rộng:

temp = txtFile. ReadLine ();

chiều rộng = (temp. Length + 1) / 7;

Chiều cao hình ảnh là số dòng trong tệp:

trong khi (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

chiều cao ++;

}

chiều cao ++;

Di chuyển con trỏ đọc trong tệp về đầu:

txtFile. DiscardBufferedData ();

Tạo một phiên bản mới của lớp Bitmap:

Bitmap bmp2 = new Bitmap (chiều rộng, chiều cao);

Sử dụng phương pháp tách, chúng tôi tách các phần tử của ma trận. Chúng tôi khai báo ba biến kiểu byte - R, G, B. Sử dụng phương pháp Phân tích cú pháp và Chuỗi con, chọn các phần tử màu riêng biệt.

Để lấp đầy pixel trong hình ảnh bằng màu này, hãy sử dụng phương pháp SetPixel (j, i, Color. FromArgb (R, G, B)), trong đó j, i là tọa độ hình ảnh, Color. FromArgb (R, G, B) là phương pháp tạo ra cấu trúc Màu sắc.

for (int i = 0; i <height; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

for (int j = 0; j <width; j + +)

{

R = byte. Parse (chuỗi con [j]. Chuỗi con (0, 2), System. Globalization. NumberStyles. HexNumber)

G = byte. Parse (chuỗi con [j]. Chuỗi con (2, 2), System. Globalization. NumberStyles. HexNumber)

B = byte. Parse (chuỗi con [j]. Chuỗi con (4, 2),

System. Globalization. NumberStyles. HexNumber)

bmp2. SetPixel (j, i, Color. FromArgb (R, G, B));

}

}

Bây giờ bạn có thể lưu hình ảnh. Nếu bạn đang làm việc trong WindowsForm, bạn có thể sử dụng lớp SaveFileDialog:

SaveFileDialog saveImage = new SaveFileDialog ();

saveImage. Filter = bmp files (*. bmp) | *. bmp | All files (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Đề xuất: