2012-04-05 25 views
8

Tôi đã viết chương trình ánh xạ ở Delphi, nơi người dùng có thể tải hình ảnh raster dưới nền mà tôi lưu trữ trong bộ nhớ. Trong một trường hợp, người dùng đã tải thành công BMP 44MB nhưng chương trình chậm chạp và khi chúng được in (tôi gạch đầu ra), chúng có lỗi Out Of Resources. Tôi đã chuyển đổi BMP thành PNG (3MB) và chương trình hoạt động tốt hơn nhiều và công việc in đã thành công.Hiệu quả của việc sử dụng PNG so với BMP với các tệp lớn

Vì PNG phải được mở rộng thành một DIB có cùng kích thước, vậy tại sao lại có sự khác biệt hiệu suất/tài nguyên? Nếu bất cứ điều gì nó cần phải làm việc nhiều hơn và phân bổ bộ nhớ để tải PNG. Tôi đang thiếu gì?

Vì dường như không có bất kỳ câu trả lời rõ ràng nào, tôi sẽ viết một dự án demo nhỏ để tôi có thể nghiên cứu thêm về điều này.

+3

Bạn có dương các tập tin BMP và PNG có cùng số điểm ảnh và BitsPerPixel? –

+0

Những gì bạn đang sử dụng để in hình ảnh? Bạn đang viết trực tiếp trên Printer.Canvas hoặc bạn đang sử dụng một thành phần trên một báo cáo như QuickReport hoặc Rave? – rkawano

+0

Francois: Vâng, tôi đã nhận được tệp khách hàng và tự mình thử. rkawano: Tôi in ra các ô DIB mà tôi gửi tới khung máy in. – Mitch

Trả lời

1

Sự khác biệt là nén.

BMP = dữ liệu thô như là PNG = cùng dữ liệu thô sử dụng "lossless" nén

này có tiết kiệm trong vòng hơn 1 cách trong giới lập trình ...

  1. tải kết quả hình ảnh nạp ít dữ liệu thô hơn vào ram.
  2. Sau đó, bạn sẽ xử lý ít dữ liệu thô hơn để bạn cần ít tài nguyên hơn.

Lát có nghĩa là vấn đề đối với bạn là mũ ví dụ ...

44MB x 10 = gạch 440MB

Vs

3MB x 10 = gạch 30MB

Máy in don không thích được đưa khối lượng lớn dữ liệu và tất cả, nhưng các máy in đắt tiền hơn có xu hướng thích in và toàn bộ tài liệu trong một đi (ví dụ như đệm toàn bộ dòng).

Vì vậy, từ ứng dụng của bạn người dùng nói "In" ... mã của bạn sau đó nói "ngay tôi sẽ gửi 10 bản sao này" và máy in bắt đầu "lưu vào bộ nhớ cache" 440MB dữ liệu thô.

Máy in tại nhà phổ biến nhất dựa trên máy tính để thực hiện bộ nhớ đệm và in nội dung được đưa ra nhưng máy in văn phòng chuẩn sẽ làm bộ nhớ đệm rồi in tài liệu.

Tuy nhiên ... tôi nghĩ rằng đây là một điều tùy chọn bạn có thể tinh chỉnh (tôi nghĩ rằng nó thay đổi từ máy in đến máy in).

EDIT:

heres một cái gì đó từ thế giới của lập trình trò chơi:

http://www.gamedev.net/topic/450104-png-vs-bmp/

+0

Khi truy tìm thông qua mã, PNG được mở rộng thành một DIB có kích thước bằng nhau với BMP trong bộ nhớ.Tôi cho rằng mã bộ nhớ hiệu quả hơn sẽ thực hiện chuyển đổi khi cần thiết. – Mitch

+0

Bạn đang nói rằng ốp lát không giúp đỡ? Tôi vẽ một phần vào ô, ở độ phân giải thiết bị, sau đó được truyền đến máy in. Tôi muốn vẽ trực tiếp và để cho trình điều khiển máy in xử lý nó nhưng sau đó tôi sẽ mất khả năng làm minh bạch. – Mitch

+0

im không hoàn toàn chắc chắn những gì bạn đang làm nhưng khái niệm cơ bản là mỗi đoạn của hình ảnh mà bạn gửi đến máy in nó phải xử lý và nó phải làm điều này như là dữ liệu "thô" không nén thường. Đây là nguyên nhân gây ra vấn đề tài nguyên của bạn ... tài nguyên trên máy in không có trên máy tính ... điều đó có hợp lý không? – War

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