2013-03-22 13 views
8

Tworzyliśmy niestandardową kamerę Android Activity, w której prostokąt jest nałożony wewnątrz podglądu kamery, a po zrobieniu zdjęcia (przy naciśnięciu przycisku ), chcemy przyciąć odpowiadający obszar prostokąta końcowego obrazu. Problem w tym, że jeszcze nie zorientowaliśmy się, jak Android mapuje ekran podglądu na ostateczny obraz.Mapowanie podglądu obrazu z aparatu na Androida do końcowego obrazu

Próbowaliśmy następującą formułę, ale działa tylko w niektórych przypadkach:

Niech X i Y będą współrzędne lewego górnego rogu prostokąta jako pokazanego na podglądzie kamery.

Niech preview_width i preview_height będą szerokością i wysokością kamery podgląd. Są to get za pomocą funkcji getBestPreviewSize(), która pętli za pośrednictwem obsługiwanych rozmiarów podglądu i wybiera większy. Załóżmy, że są to 1280 i 720.

Niech szerokość_obrazu i wysokość_obrazu będą stanowić szerokość i wysokość końcowego obrazu , obsługiwanego przez aparat. Dla naszych celów przyjmijmy, że jest to 1632 * 1224 (na Sony Ericsson XPERIA odpowiada to 2 MP).

Chcemy znaleźć x_map, y_map, które są X i Y z przyciętego prostokąta z ostatecznego obrazu.

Następnie przez reguły analogicznie wzór był używany był:

x_map = picture_width * X/preview_width; y_map = picture_height * y/preview_height;

Jednak nie wydaje się to działać we wszystkich przypadkach. Okazało się, że gdy wymiary ekranu telefonu są zbliżone do rozmiaru podglądu, ta formuła prawie działa (w przybliżeniu z małym błędem).

Jednak w innych przypadkach, takich jak telefon Sony XPERIA, gdzie wymiary ekranu wynoszą: szerokość: 480 i wysokość: 854, formuła kończy się niepowodzeniem.

Na przykład, dla x = 50, a następnie x_map = 1632 * 50/1280 = 63,75 Jednakże ta liczba, jak pokazano przez prostokątny obszar obcięcia końcowego obraz, tak naprawdę nie odpowiadają prostokątem obszar podglądu. To jest daleko. Nasza formuła nie uwzględnia wymiarów ekranu, , chociaż eksperymentowanie z modyfikowaniem go w celu uwzględnienia ich, nie spowodowało żadnych pożądanych rezultatów.

Podejrzewamy, że odwzorowanie pomiędzy wielkością podglądu i ostatecznego obrazu jakoś uwzględnia wymiarów ekranu, ale nie zorientowali się, jak dokładnie, ponieważ nie ma na nim dokumentacja i po intensywnie szukając odpowiedzi na w sieci nic istotnego nie wyszło. Uważamy, że istnieje pewien współczynnik skali i współczynnik proporcji, który musimy wziąć pod uwagę przed zastosowaniem reguły analogii, aby formuła działała poprawnie.

Czy znasz poprawną formułę dla powyższego?

Odpowiedz

1

Po pierwsze, uzyskaj największy rozmiar obrazu zwrócony przez Camera.getSupportedPictureSizes - jest to natywna rozdzielczość aparatu, z której można określić natywny współczynnik proporcji. Dowolny rozmiar obrazu lub rozmiar podglądu z innym współczynnikiem kształtu zostaną przycięte zgodnie z `Matrix.ScaleToFit.CENTER '.

Zobacz także: https://stackoverflow.com/a/18159351/994834

Powiązane problemy