Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Cách đọc file ảnh thành từng byte?

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    29

    Mặc định Cách đọc file ảnh thành từng byte?

    Chào các bạn. Các bạn hướng dẫn cho mình cách đọc một file anh thành từng byte với. Đầu vào của mình là một file ảnh với định dang bất kỳ. Đầu ra là file ảnh này đã được đọc và chuyển sang dạng nhi phân.

  2. #2
    Ngày gia nhập
    01 2011
    Bài viết
    189

    Trong Forum của trang này có nhiều rồi đó bạn!!

  3. #3
    Ngày gia nhập
    11 2011
    Bài viết
    29

    Bạn ơi bạn biết thì giúp mình với. Chứ mình search đâu có được gì. Chức nẳng search của 4r kém lắm. Toán search ra cái gì ý.

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi HUMG.ThongIT Xem bài viết
    Chào các bạn. Các bạn hướng dẫn cho mình cách đọc một file anh thành từng byte với. Đầu vào của mình là một file ảnh với định dang bất kỳ. Đầu ra là file ảnh này đã được đọc và chuyển sang dạng nhi phân.
    Nếu đọc nhị phân thì đâu cần gì file ảnh, bất cứ file nào cũng đọc nhị phân được cả. Bạn dùng File.ReadAllBytes(), nó trả ra mảng byte là nội dung dạng nhị phân của file.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    11 2011
    Bài viết
    29

    Bác ơi em đọc file ảnh rồi. Xong em lưu các bít đấy vào trong một file text bây giờ có cách nào em đọc từ file text đây rồi khôi phục lại cái ảnh bạn đầu không bác.

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định Cách đọc file ảnh thành từng byte?

    File text ko chứa được nội dung binary, mình ko hiểu bạn lưu kiểu gì mà được. Đoạn code lúc lưu cái mảng byte [] xuống file text của bạn thế nào ? Bạn là người lưu xuống mà bạn ko biết đọc ngược lên lại thì quả thật hơi khó tin đấy.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    09 2010
    Bài viết
    276

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    File text ko chứa được nội dung binary, mình ko hiểu bạn lưu kiểu gì mà được. Đoạn code lúc lưu cái mảng byte [] xuống file text của bạn thế nào ? Bạn là người lưu xuống mà bạn ko biết đọc ngược lên lại thì quả thật hơi khó tin đấy.
    Vâng em đang làm bài tập về thuật toán Huffman mà chưa biết phải làm sao nữa. Em định đọc file ảnh thành thừng byte bằng việc dùng hàm ReadAllByte trong C#... tất cả mới chỉ là ý tưởng vậy em chưa biết làm với file ảnh thế nào. Bác gợi ý cho em với. Làm với file text thì em làm được rồi. Nhưng với nhưng file khác thì em bí quá :(.

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình thấy file text, file ảnh thì file nào cũng là file cả thôi. Trước sau gì bạn cũng làm việc trên mảng byte, vậy thì phân biệt ảnh hay text để làm gì cho rắc rối vậy ?
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    09 2010
    Bài viết
    276

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Mình thấy file text, file ảnh thì file nào cũng là file cả thôi. Trước sau gì bạn cũng làm việc trên mảng byte, vậy thì phân biệt ảnh hay text để làm gì cho rắc rối vậy ?
    Thuật toán Huffman thì em hiểu rồi. Nhưng bắt tay sang cài đặt thì em thấy khó quá. Bác xem cố vấn giúp em với . Đây là hình ảnh em demo về việc đọc file text.
    Trong bài em đọc vào một file text sau đó thông kê sự xuất hiện của các ký tự, tần xuất và từ mã của nó trong listview. Ô textbox bên ở dưới em cho view ra cái file mã bit mà sau khi em thông kê ở trên và ghép lại. Ô textbox cuối cùng là để hiện lại chuỗi trong file text sau khi giải nén. Em chỉ dùng đoạn code sau đọc sang byte.

    Class hmTree để tạo lên cây Huffman
    Visual C# Code:
    1. public class hmTree : IComparable
    2.     {
    3.         public string str;  //Ký tự
    4.         public int frequency;   // Tần số xuất hiện.
    5.  
    6.         public hmTree left = null, right = null;    //Con trỏ trái và phải.
    7.  
    8.         //Phương thức so sánh tần số xuất hiện của các từ.
    9.         public int CompareTo(object obj)
    10.         {
    11.             return frequency.CompareTo(((hmTree)(obj)).frequency);
    12.         }
    13.     }

    Class hmFrequency để thống kê số ký tự và tần xuất.
    Visual C# Code:
    1. public class hmFrequency
    2.     {
    3.         private Hashtable hTable;
    4.         public hmFrequency (string str)
    5.         {
    6.             hTable = new Hashtable();
    7.             for (int i = 0; i < str.Length; i++)
    8.             {
    9.                 char t = str[i];
    10.                 if (hTable.Contains(t))
    11.                 {
    12.                     hTable[t] = (int)hTable[t] + 1;
    13.                 }
    14.                 else
    15.                 {
    16.                     hTable.Add(t, 1);
    17.                 }
    18.             }
    19.         }
    20.  
    21.         public int this[char c]
    22.         {
    23.             get
    24.             {
    25.                 return int.Parse(hTable[c].ToString());
    26.             }
    27.         }
    28.  
    29.         public char[] GetSymbols
    30.         {
    31.             get
    32.             {
    33.                 List<char> chars = new List<char>();
    34.                 foreach (char c in hTable.Keys)
    35.                     chars.Add(c);
    36.                 return chars.ToArray();
    37.             }
    38.         }
    39.     }

    Class hmCoding để thực hiện việc nén và giải nén.
    Visual C# Code:
    1. class hmCoding
    2.     {
    3.         hmFrequency table;
    4.         hmTree tree;
    5.         List<hmTree> queue;
    6.         Dictionary<char, string> code;
    7.         private int Length;
    8.         public hmCoding()
    9.         {
    10.         }
    11.         private void Traverse(hmTree t, char c, ref string s)
    12.         {
    13.             if (t.left == null || t.right == null)
    14.             {
    15.                 return;
    16.             }
    17.             else if (t.left.str.Contains(c.ToString()))
    18.             {
    19.                 s = s + "0";
    20.                 Traverse(t.left, c, ref s);
    21.             }
    22.             else if (t.right.str.Contains(c.ToString()))
    23.             {
    24.                 s = s + "1";
    25.                 Traverse(t.right, c, ref s);
    26.             }
    27.         }
    28.         public string Encode(string input)
    29.         {
    30.             tree = new hmTree();
    31.             queue = new List<hmTree>();
    32.             code = new Dictionary<char, string>();
    33.             table = new hmFrequency(input);
    34.             Length = input.Length;
    35.             foreach (char c in table.GetSymbols)
    36.             {
    37.                 hmTree t = new hmTree();
    38.                 t.str = c.ToString();
    39.                 t.frequency = table[c];
    40.                 queue.Add(t);
    41.             }
    42.  
    43.             queue.Sort();
    44.             while (queue.Count >= 2)
    45.             {
    46.                 hmTree t = new hmTree();
    47.                 t.left = queue[0];
    48.                 t.right = queue[1];
    49.                 t.str = queue[0].str + queue[1].str;
    50.                 t.frequency = queue[0].frequency + t.right.frequency;
    51.                 queue.RemoveRange(0, 2);
    52.                 queue.Add(t);
    53.                 queue.Sort();
    54.             }
    55.  
    56.             tree = queue[0];
    57.  
    58.             foreach (char c in table.GetSymbols)
    59.             {
    60.                 string codeword = "";
    61.                 Traverse(tree, c, ref codeword);
    62.                 code.Add(c, codeword);
    63.             }
    64.  
    65.             StringBuilder returnString = new StringBuilder();
    66.  
    67.             foreach (char c in input)
    68.             {
    69.                 returnString.Append(code[c]);
    70.             }
    71.  
    72.             return returnString.ToString();
    73.         }
    74.         public string Decode(string encodedString)
    75.         {
    76.             int i = 0;
    77.             hmTree T = tree; //Start from root
    78.             string result = ""; //decoded string
    79.             while (i < encodedString.Length)
    80.             {
    81.                 if (encodedString[i] == '0')
    82.                     T = T.left;
    83.                 else
    84.                     T = T.right;
    85.                 if (T.str.Length == 1)
    86.                 {
    87.                     result += T.str;
    88.                     T = tree;
    89.                 }
    90.                 i++;
    91.             }
    92.             return result;
    93.         }
    94.         public int GetFrequency(char c)
    95.         {
    96.             return int.Parse(table[c].ToString());
    97.         }
    98.         public string GetCodeword(char c)
    99.         {
    100.             return code[c];
    101.         }
    102.         public double AverageBit
    103.         {
    104.             get
    105.             {
    106.                 double t = 0;
    107.                 foreach (char c in code.Keys)
    108.                 {
    109.                     t += (table[c] * (code[c].Length));
    110.                 }
    111.                 t = t / Length;
    112.                 return t;
    113.             }
    114.         }
    115.         public string Symbols
    116.         {
    117.             get
    118.             {
    119.                 string t = "";
    120.                 foreach (char c in code.Keys)
    121.                 {
    122.                     t = t + c;
    123.                 }
    124.                 return t;
    125.             }
    126.         }
    127.     }

    Hàm readFile để đọc nội dung file text

    Visual C# Code:
    1. private string readFile(string fileName)
    2.         {
    3.             StreamReader read;
    4.             string s = "";
    5.             using (read = new StreamReader(fileName))
    6.             {
    7.                 string line;
    8.                 while ((line = read.ReadLine()) != null)
    9.                 {
    10.                     s += line;
    11.                 }
    12.                 richTextBox1.Text = s;
    13.                 read.Dispose();
    14.             }
    15.             return s;
    16.         }

    Trong này em không dùng hàm ReadAllByte nữa mà em thay vào là calss hmFrequecy để thống kê các ký tự và tạo từ mã cho nó luôn.
    Đã được chỉnh sửa lần cuối bởi nguoirung1.6 : 09-12-2011 lúc 05:41 PM.

  10. #10
    Ngày gia nhập
    04 2009
    Nơi ở
    Đà Nẵng
    Bài viết
    72

    Thuật toán Huffman này mình đã làm rồi. Hiện tại mình đang ở công ty mà code bỏ máy ở nhà rồi! Có gì bạn liên hệ qua yahoo: nhatnguyet_1612 rồi mình sẽ hướng dẫn cụ thể và send code.

Các đề tài tương tự

  1. Kỹ thuật C++ Cách sửa bit cuối trong byte đọc từ file?
    Gửi bởi dragonz_vb trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 29-08-2013, 10:41 AM
  2. Lập trình C chia số 2 byte cho số 1 byte và cho kết quả thương là số 2 byte và phần dư là số 1 byte
    Gửi bởi sakurai111 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 17-11-2012, 10:58 PM
  3. Open file từ 1 mảng kiểu byte
    Gửi bởi Michael trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 30-09-2011, 12:51 PM
  4. Cách xử lý text file và byte[]
    Gửi bởi rossoner trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 17-05-2011, 03:38 PM
  5. Đọc 45 byte đầu của 1 File exe mà sao chỉ được có 3 Byte
    Gửi bởi cSharp trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 08-02-2009, 10:25 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn