2011-11-25 26 views
6

Tôi hiện đang làm việc trên một phần mềm mosaic ảnh mã nguồn mở C# (Sourceforge Link). Phần mềm này kết hợp một lượng lớn các bức ảnh nhỏ (lát) thành một hình ảnh lớn.C#: Lưu JPG ở các phần

Vì kích thước hình ảnh cuối cùng thường là theo thứ tự 20k px lần 15k px, tôi chỉ lưu bản đồ về cách sắp xếp các ô trong bộ nhớ. Để xây dựng hình ảnh cuối cùng, tôi đang xây dựng nó trong các bộ phận, cụ thể là trong ban nhạc của 8 dòng (có thể bởi bất kỳ số nào khác, quá).

Trong trường hợp của bmps, dữ liệu này sau đó có thể dễ dàng lưu đoạn bằng đoạn đầu tiên viết tiêu đề bmp và sau đó nối dữ liệu ARGB vào tệp này.

Tuy nhiên, kết quả bmps quá lớn để xử lý thêm (ví dụ: đưa chúng cho một số công ty in áp phích). Do đó, tôi muốn lưu những hình ảnh lớn như jpgs trên hdd của tôi. Vấn đề là bây giờ, vì jpgs được nén, việc ghi dữ liệu theo khối có vẻ rất phức tạp (chức năng Bitmap.Save() bình thường sẽ tải toàn bộ hình ảnh vào bộ nhớ trước và do đó không áp dụng được), kể từ khi viết thuần túy , dữ liệu RGB không nén sẽ không làm được.

Chức năng cơ bản của việc viết jpg trong nhóm phải tồn tại, vì tôi biết thuật toán nén của jpg hoạt động với khối hoặc 8x8 px.

Tôi đã xem xét một số thư viện hình ảnh (FreeImage, GraphicsMagick, LibTiff.NET) để tìm giải pháp cho vấn đề này, nhưng không thể tìm thấy bất kỳ vấn đề nào. LibTiff về cơ bản có chức năng mong muốn, nhưng chỉ cho định dạng hình ảnh tiff.

Cảm ơn rất nhiều sự giúp đỡ của bạn! Tối đa

Trả lời

1

Vì bạn không đề cập đến OpenJPEG library, tôi nghĩ bạn có thể đã bỏ lỡ nó.

http://www.openjpeg.org/

Tất nhiên bạn sẽ cần một số giấy gói xung quanh nó nhưng tôi nghĩ rằng bạn có thể đạt được những gì bạn muốn làm sử dụng thư viện đó. Nhưng đây không phải là giải pháp dễ nhất, tôi biết. Nếu ai đó đưa ra đề xuất tốt hơn, dễ dàng hơn, bạn có thể bỏ qua thư viện này.

Chỉnh sửa: Điều này có vẻ rất không đầy đủ nhưng có thể hữu ích vì đó là mã C#. http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx

+0

Cảm ơn, tôi thực sự đã bỏ lỡ nó. Sẽ kiểm tra xem nó ra càng sớm càng tốt! – mgulde

+0

Hmm, hóa ra OpenJPEG về cơ bản chỉ dành cho chuyển đổi JPEG sang JPEG2K và ngược lại. Bộ mã hóa đơn giản là một giải pháp tốt, mặc dù nó có vẻ phức tạp;) – mgulde

+0

Hmm, _does_ thư viện openjpeg hỗ trợ gia tăng I/O? Tôi nhìn vào nó một chút (mặc dù các tài liệu rất tối thiểu), và tất cả các giao diện I/O hình ảnh dường như chỉ hoạt động trên các ảnh hoàn chỉnh ... Bạn có thể chỉ ra các cuộc gọi API mà một người dùng sử dụng để làm gia tăng I/O với thư viện openjpeg ...? Cảm ơn! – snogglethorpe

Các vấn đề liên quan