2013-04-10 10 views
11

Konwertuję obrazy do pliku MOV, i przydarzyło mi się coś interesującego. Zalogowałem moje bity na komponent koloru, bity na piksel i bajty na wiersz. Oto mój kod:Dlaczego liczba bajtów mojego obrazu w wierszu jest większa niż liczba bajtów na piksel razy większa od jego szerokości?

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

oto moje wyjście:

Obraz Szerokość: 300, Wysokość: 300 (wszystko jako oczekiwany) BPC: 8 (8 bitów na kolor ... do tej pory tak dobrze) BPP: 32 (32 = 4 komponenty ARGB * 8 bitów na kolor ... rozumiem) ByPR: 1216 (300 pikseli na wiersz * 4 bajty na piksel = 1200 bajtów na wiersz)

Dlaczego jestem zalogowany 1216 bajtów w każdym rzędzie, a nie 1200? Przy okazji, nie jest to tylko przypadek. Kiedy tworzę wideo oparte na tych liczbach dla rozmiarów buforów, to działa. Kiedy tworzę go z 1200 bajtami na wiersz, otrzymuję pomieszany efekt aliasingu.

Myśli ?!

+0

Właściwie to muszę zrobić to samo. Czy możesz dać mi kod, który zamienia obrazy na mov? W porządku, jeśli nie możesz. Mój e-mail to [email protected] Byłoby to bardzo wdzięczne. – anivader

+0

Mam trochę inne potrzeby: nowa nerka i pieniądze. Każda ilość. Byłoby fajnie, gdybyś mógł się podzielić. Tha-a-anks! –

Odpowiedz

19

System traktuje obrazy jako wielokrotność 64 bajtów na wiersz, prawdopodobnie w celu uzyskania lepszej wydajności dzięki wyrównaniu linii pamięci podręcznej. 1200 nie jest wielokrotnością 64, ale 1216 jest.

+0

Interesujące ... jakikolwiek powód, czy jest to dość arbitralne? Tylko kwestia ułatwienia przydzielania buforów? Czy posiadasz również dokumentację, która może to wskazywać specjalnie na CGImage? Dzięki! – Herm

+1

Tak jak powiedziałem, zakładam, że wynika to z zachowania linii poleceń w pamięci podręcznej. Procesor zawsze ładuje całą linię pamięci podręcznej na raz. Nie przypominam sobie żadnej dokumentacji, która by ci wskazywała. –

+0

Czy istnieje sposób, aby temu zapobiec? Czy mogę ustawić swoją bajtę? – anivader

Powiązane problemy