2013-04-10 37 views
11

Tôi đang chuyển đổi hình ảnh thành tệp MOV và có một điều thú vị xảy ra với tôi. Tôi đã đăng nhập bit của tôi cho mỗi thành phần màu sắc, bit trên mỗi pixel và byte mỗi hàng. Dưới đây là mã của tôi:Tại sao Byte của hình ảnh của tôi trên mỗi Hàng nhiều hơn Byte của nó trên mỗi Pixel gấp Chiều rộng của nó?

NSLog(@"Image width: %d, Height: %d", CGImageGetWidth(image), CGImageGetHeight(image)); 
NSLog(@"BPC: %d \ BPP: %d \ ByPR: %d", CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image), CGImageGetBytesPerRow(image)); 

Dưới đây là kết quả của tôi:

Chiều rộng hình ảnh: 300, Height: 300 (mọi thứ đều như dự kiến) BPC: 8 (8 bit cho mỗi màu ... cho đến nay rất tốt) BPP: 32 (32 = 4 thành phần ARGB * 8 bit cho mỗi màu ... nhận được) ByPR: 1216 (300 px mỗi hàng * 4 byte cho mỗi pixel = 1200 byte mỗi hàng)

Tại sao tôi đăng nhập 1216 byte mỗi hàng và không phải là 1200? Nhân tiện, đây không chỉ là một trò đùa. Khi tôi tạo một video dựa trên những con số cho kích thước bộ đệm, nó hoạt động. Khi tôi tạo ra nó với 1200 byte mỗi hàng, tôi nhận được một số hiệu ứng bí ẩn sai lầm.

Suy nghĩ ?!

+0

Thực ra tôi cũng cần làm điều tương tự. Bạn có thể cho tôi mã chuyển đổi hình ảnh thành mov không? Không sao nếu bạn không thể. Email của tôi là [email protected] Nó sẽ siêu biết ơn. – anivader

+0

Tôi có nhu cầu hơi khác: thận và tiền mới. Số lượng bất kỳ. Sẽ thật tuyệt nếu bạn có thể chia sẻ. Tha-a-anks! –

Trả lời

19

Hệ thống thích hình ảnh là bội số của 64 byte mỗi hàng, có lẽ cho hiệu suất tốt hơn do căn chỉnh dòng bộ nhớ cache. 1200 không phải là bội số của 64, nhưng là 1216.

+0

Thú vị ... bất kỳ lý do gì, hoặc điều này khá tùy ý? Chỉ cần một vấn đề của việc phân bổ bộ đệm dễ dàng hơn? Ngoài ra, bạn có bất kỳ tài liệu nào có thể chỉ ra điều này đặc biệt cho CGImage không? Cảm ơn! – Herm

+1

Như tôi đã nói, tôi cho rằng đó là do hành vi của dòng bộ nhớ cache. CPU luôn tải toàn bộ dòng bộ nhớ cache cùng một lúc. Tôi không nhớ bất kỳ tài liệu nào để chỉ cho bạn. –

+0

Có cách nào để ngăn chặn việc đó không? Tôi có thể đặt byteperrow của tôi không? – anivader

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