Cách tạo dãy số từ hình ảnh

Liên hệ QC

giaiphap

==(^o^)==
Tham gia
12/3/07
Bài viết
5,769
Được thích
6,240
Donate (Momo)
Donate
Giới tính
Nam
Tôi có tham khảo cách mà người ta tạo ra file hình bằng những con số liên tục trong một danh sách (như file bên dưới). Vậy các anh (chị) cho tôi hỏi làm cách nào mà từ một hình ảnh tôi có thể tạo được một danh sách các số như ô A1 trong file dưới. Mục đích là để từ một ảnh bất kỳ tôi có thể đưa nó sang một danh sách số như trong file để sang máy khác tôi sẽ dùng code của file dưới để chuyển danh sách số này sang lại file hình trên máy đó (tránh trường hợp khi người dùng copy sẽ làm mất file hình kèm theo).
 

File đính kèm

  • Tao file hinh.xlsm
    15.5 KB · Đọc: 58
Tôi có tham khảo cách mà người ta tạo ra file hình bằng những con số liên tục trong một danh sách (như file bên dưới). Vậy các anh (chị) cho tôi hỏi làm cách nào mà từ một hình ảnh tôi có thể tạo được một danh sách các số như ô A1 trong file dưới. Mục đích là để từ một ảnh bất kỳ tôi có thể đưa nó sang một danh sách số như trong file để sang máy khác tôi sẽ dùng code của file dưới để chuyển danh sách số này sang lại file hình trên máy đó (tránh trường hợp khi người dùng copy sẽ làm mất file hình kèm theo).
Ý anh là băm hình ra mã đó hả
 
Upvote 0
Đúng rồi, làm thế nào từ một tấm hình bất kỳ mình sẽ tạo ra dãy số như trong file.

Nếu tôi không lầm thì đây là Convert Image to Hex.
Trong Access có 1 kiểu Data Type là BLOB (Binary Large Object) dùng để lưu file ảnh thành dạng này. Trong SQL Server cũng vậy và có thêm dạng varbinary cũng để lưu file ảnh. Đối với Access hay SQL Server thì phần lớn mọi người không muốn lưu file ảnh chung với CSDL vì sẽ làm CSDL nặng lên rất nhiều, do vậy Access thì sẽ tách ra lưu Folder ảnh riêng còn SQL Server thì không làm như Access được nhưng cũng tách ra một file .mdf riêng chi chỉ để lưu file ảnh.
Trong Excel thì bác lại muốn chuyển đổi thành dạng này để lưu. Bác tìm các hàm Image to Hex trên mạng cũng có chia sẻ đó bác.
 
Upvote 0
hỏi làm cách nào mà từ một hình ảnh tôi có thể tạo được một danh sách các số như ô A1 trong file dưới
Vụ bẻ khóa VBA hay dùng phần mềm HxD đó anh.
Anh mở HxD lên, kéo thả cái ảnh vào đó là có dãy số kia luôn.

222545

Trường hợp ngược lại, từ HxD tạo một cửa sổ mới, chép dãy số đó vào và lưu lại thành một file.jpg (*.bmp,..) là được một bức ảnh.
 
Upvote 0
Chủ đề hay đấy bạn chủ thớt. Nhiều cái lý thú đấy.
 
Upvote 0
Giờ mình mới download file của chủ thớt và xem code. Code chậm và có lỗi. Nếu chủ thớt dùng lại cho yêu cầu của mình thì cần fix và cải tiến nhiều
1. Dùng Open statement: Văng khi gặp path file có dấu
2. Put từng byte, rất chậm. Thao tác với I/O nên dùng buffer dập xuống, càng lớn càng tốt, dập 1 lần thôi, size buf nên là bội của 512 hay 1024.
3. Phân cách hex string = | không tốt.
Và có cái mình mới phát hiện là trên VBA và Excel, IPicture và StdPicture không support load image from memory. Cái này lại phải dùng API với con bò kéo xe "Vớ Bở À" rồi
Chủ thớt dùng code này phải lưu xuống và đọc lên ngược lại từ file thôi. Chia buồm :)
 
Lần chỉnh sửa cuối:
Upvote 0
Giờ mình mới download file của chủ thớt và xem code. Code chậm và có lỗi. Nếu chủ thớt dùng lại cho yêu cầu của mình thì cần fix và cải tiến nhiều
1. Dùng Open statement: Văng khi gặp path file có dấu
2. Put từng byte, rất chậm. Thao tác với I/O nên dùng buffer dập xuống, càng lớn càng tốt, bội của 512 hay 1024.
3. Phân cách hex string = | không tốt.
Và có cái mình mới phát hiện là trên VBA và Excel, IPicture và StdPicture không support load image from memory. Cái này lại phải dùng API với con bò kéo xe "Vớ Bở À" rồi
Chủ thớt dùng code này phải lưu xuống và đọc lên ngược lại từ file thôi. Chia buồm :)
Anh cải tiến cho em học với (máy cái vụ API với memory .... em yếu lắm)


ps. Kiến thức anh rộng quá em theo không kịp :wallbash: :wallbash: :wallbash: :wallbash: :wallbash::wallbash:
 
Upvote 0
VBA "Vớ Bở À" dùng cho dân Văn phòng mà, biết mấy cái kia chi cho mệt, nhức đầu bé, xấu đi nữa. Không nghe mấy bác kia nói à :)
 
Lần chỉnh sửa cuối:
Upvote 0
VBA "Vớ Bở À" dùng cho dân Văn phòng mà, biết mấy cái kia chi cho mệt, nhức đầu bé. Không nghe mấy bác kia nói à :)
Công việc nhà của Bé sắp xong rồi nên Bé thích nhức đầu 1 chúc và Bé thấy anh giải thích hay hay nên Bé cũng muốn mò Debug, OllyDbg, Api, Hook, Decompiler..... :kicking::kicking::kicking::kicking::kicking::kicking:
 
Upvote 0
Có ông già sư phụ, cái gì cũng biết đó bé, ổng tên Google, hỏi đúng là ổng quăng trả lời ra đọc mệt nghĩ luôn :)
 
Upvote 0
Giải quyết cái vụ này hay nè, khỏi mất công mang kèm file hình theo file Excel. Chúng ta sẽ làm các hàm sau:
1. Read từ 1 file user yêu cầu lên memory, bytes buffer, convert sang hex string, ghi xuống 1 cell
2. Read hex string từ 1 cell, convert ngược lại thành byte buffer, convert thành 1 Picture,để có thể gán cho cái gì đó mà chứa picture được
3. Read hex string từ 1 cell, convert ngược lại thành byte buffer, ghi xuống file user yêu cầu.
Cái 2 thì phải mò rồi, để xem IPicture, StdPicture có hàm "un đồ cú mần" giấu ở đâu không thôi, dùng luôn cho phẻ :)
 
Upvote 0
đặt 1 Cục gạch lót dép ngồi Hóng ===\. -0-0-0-
 
Upvote 0
Bác Mạnh viết hàm 1 với 3 đi, đơn giản mà
 
Upvote 0
:p :p :p :p :p :p :p
 
Lần chỉnh sửa cuối:
Upvote 0
Hì hì, không bạn. Ở đây không liên quan gì tới Đeo Phai hay DLL gì cả. Code VBA thôi. Trước mắt các bạn code 2 hàm 1 và 3 đi. Tốc độ tính sau, dù biết chắc chắn sẽ chậm với file lớn cỡ 1, 2 MB rồi. Cần thì mới optimize code VBA hay dùng API hoặc tệ nhất là dùng Dll.
Còn vấn đề 2 thì mình vừa hỏi ông Google, thiên hạ làm đầy rồi, chỉ copy về test, dùng thôi.
Mình post ở đây để các bạn tham khảo, dùng:
1. https://stackoverflow.com/questions/26442660/loading-a-picturebox-image-from-a-byte-array-in-vb6
2. https://groups.google.com/forum/m/#!topic/microsoft.public.vb.general.discussion/F057yLyA_Lk
3. https://bytes.com/topic/access/answers/204355-picturedata-stdpicture
Nôm na là đều quay quanh hàm API CreateStreamOnHGlobal và OleLoadPicture cả.
Chúc các bạn làm tốt. Vì mình cứ thấy API với VB/VBA là mình ghét à :p
 
Upvote 0
Với chủ thớt
Put có thể ghi toàn bộ mảng bai, không phải ghi từng bai.
Nếu muốn dùng API thì vd. CreateFile, WriteFile ...
--------------
Dân văn phòng nhiều khi muốn làm những việc mà để làm được nó thì phải dùng API. Thì cứ xem các bài đăng trên GPE thì thấy là nhiều dân văn phòng có những yêu cầu kiểu đó. Vậy dùng API ở đây là bắt buộc, là do nhu cầu. Còn chưa thấy dân văn phòng nào có nhu cầu đếm thời gian cỡ ms. Có chăng thì chỉ là số đếm trên đầu ngón tay của 1 bàn tay. Một bên là bắt buộc do nhu cầu, một bên không là bắt buộc do nhu cầu văn phòng. ̣Không hiểu được người ta nói gì thì đừng có nói bừa.
--------------
Tiêu đề
Cách tạo dãy số từ hình ảnh
Đọc tiêu đề tôi có cảm giác là bạn có 1 hình trên sheet. Bây giờ bạn muốn tạo một chuỗi bai từ hình đó.
Đọc nội dung
để sang máy khác tôi sẽ dùng code của file dưới để chuyển danh sách số này sang lại file hình trên máy đó
lại có cảm giác là bạn đã có 1 chuỗi bai trên sheet (cell) và bạn muốn tạo từ chuỗi bai đó 1 hình ảnh.

Rõ ràng 2 việc này là khác nhau, ngược nhau. Vậy mục đích của bạn là gì? Nếu bạn có 1 hình mà không muốn đính kèm theo tập tin Excel ở dạng tập tin ngoài thì load nó vào Shape, Image thôi chứ khó khăn gì? Rồi nếu cần thì tạo IPicture (IPictureDisp) từ ảnh lưu đó. Code tạo IPicture (IPictureDisp) thì đã có đầy trên GPE (trên internet) từ bao lâu rồi. Đâu phải chờ tới bây giờ mới có người mở mang đầu óc?

Vấn đề kieu manh nói là vấn đề cụ thể. Không hiểu người ta muốn gì, giả thiết ra sao thì ngồi im mà nghe.

Vấn đề kieu manh nói là: tôi có một chuỗi bai. Làm thế nào để "lưu" chuỗi bai đó vào tập tin Excel để khi cần thì tôi có lại chuỗi bai ban đầu, với mục đích dùng chuỗi bai đó cho một việc gì đó.

Thực chất mọi tập tin chẳng qua là một chuỗi bai dài ghi trên đĩa. Tôi muốn "lưu" một tập tin bất kỳ - txt, pdf, doc, jpg, bmp, avi, exe, dll, ocx ... (nói cho cùng chỉ là những chuỗi bai dài dằng dặc) vào Excel để sau đó lúc cần thì dùng. Cái này thì dễ thôi. Ghi mảng bai vào cell ở dạng chuỗi hex. Nhưng cell có giới hạn số ký tự nên để ghi vd. AVI > 3 MB tôi phải dùng > 100 cell.

Cách tôi đề nghị với kieu manh là ghi chuỗi bai vào Image. Thực ra nếu tập tin cần "lưu" vào Excel là ảnh thì load nó vào Image thôi. Nhưng trong vấn đề tôi nói với kieu manh thì chuỗi bai kia có thể là chuỗi bai đọc từ tập tin bất kỳ - txt, pdf, doc, avi, exe, dll, ocx ... Mà các tập tin này thì rõ ràng không load được vào Shape, Image bằng vài click chuột đơn giản được (vd. Insert -> Shapes -> Rectangle -> phải chuột -> Format shape -> Fill -> Picture or texture fill -> chọn ảnh). Và với các tập tin đó thì tôi đề nghị cách "lưu" chúng vào Image, và cách đọc lại chuỗi bai ban đầu. Với cách tôi giới thiệu cho kieu manh thì vd. tôi đọc chuỗi bai nội dung của tập tin hichic.wmv và "lưu" nó vào Image. Sau đó khi cần thì tôi lấy lại chuỗi bai ban đầu và ghi trên đĩa ở máy hiện hành thành xyz.wmv -> chiếu clip WMV cho "đối tác" xem -> xóa tập tin xyz.wmv.

Tất nhiên mỗi người có 1 cách của mình. Cách của tôi là vậy.

Mà cần gì nói nhiều. Tôi có tập tin hichic.wmv. Có thể ghi trực tiếp nội dung - chuỗi bai của hichic.wmv ở dạng chuỗi hex trong 1 hoặc rất nhiều cell. Giả sử ngoài cách này, tức không ghi vào 100 cell, thì còn cách nào không. Cách của tôi là một cách để "lưu" chuỗi bai ở dạng bitmap trong Image. Không hiểu người ta định làm gì, giả thiết ra sao thì đừng nói.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom