Add support for reading a flipped image to accommodate front cameras

git-svn-id: https://zxing.googlecode.com/svn/trunk@1682 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2010-12-16 13:36:04 +00:00
parent 99d09e0a44
commit 625ab14af9
25 changed files with 370 additions and 285 deletions

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">بفحص مخزن متعددة من نفس الباركود في التاريخ</string>
<string name="preferences_remember_duplicates_title">تذكر التكرارات</string>
<string name="preferences_result_title">إعدادات النتائج</string>
<string name="preferences_reverse_image_summary">تمكين على الأجهزة مع كاميرا أمامية فقط</string>
<string name="preferences_reverse_image_title">عكس الكاميرا صورة</string>
<string name="preferences_scanning_title">عندما لمسح الباركود</string>
<string name="preferences_supplemental_summary">محاولة لاسترداد مزيد من المعلومات حول محتويات الباركود</string>
<string name="preferences_supplemental_title">استرداد مزيد من المعلومات</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Duplikáty čárových kódú v historii ukládat samostatně, nebo jako jeden čárový kód</string>
<string name="preferences_remember_duplicates_title">Pamatovat všechny duplikáty</string>
<string name="preferences_result_title">Výsledek nastavení</string>
<string name="preferences_reverse_image_summary">Povolit na zařízeních s pouze přední fotoaparát</string>
<string name="preferences_reverse_image_title">Obrácený obraz z kamery</string>
<string name="preferences_scanning_title">Při skenování čárových kódů pro, dekódovat\u2026</string>
<string name="preferences_supplemental_summary">Získat více informací o obsahu čárového kódu</string>
<string name="preferences_supplemental_title">Získat více informací</string>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2010 ZXing authors
@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Gem flere scanninger af de samme stregkoder i historik</string>
<string name="preferences_remember_duplicates_title">Husk dubletter</string>
<string name="preferences_result_title">Resultatindstillinger</string>
<string name="preferences_reverse_image_summary">Aktiver på enheder med en front kamera kun</string>
<string name="preferences_reverse_image_title">Tilbageført kamerabilledets</string>
<string name="preferences_scanning_title">Når der scannes efter stregkoder\u2026</string>
<string name="preferences_supplemental_summary">Prøv at hente mere information om stregkodens indhold</string>
<string name="preferences_supplemental_title">Hent mere info</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Speichern mehrerer Scans der gleichen Barcode in Historie</string>
<string name="preferences_remember_duplicates_title">Denken Sie daran, Duplikate</string>
<string name="preferences_result_title">Ergebnis-Einstellungen</string>
<string name="preferences_reverse_image_summary">Aktivieren Sie bei Geräten mit einer Frontkamera nur</string>
<string name="preferences_reverse_image_title">Reversed Kamerabild</string>
<string name="preferences_scanning_title">Beim Scannen von Barcodes, dekodieren\u2026</string>
<string name="preferences_supplemental_summary">Versuchen Sie, mehr Informationen über die Barcode-Inhalte abrufen</string>
<string name="preferences_supplemental_title">Rufen Sie weitere Informationen</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Guarde varios escáneres del mismo código de barras en la historia</string>
<string name="preferences_remember_duplicates_title">Recuerde duplicados</string>
<string name="preferences_result_title">Configuración de resultados</string>
<string name="preferences_reverse_image_summary">Activar en dispositivos con cámara frontal sólo</string>
<string name="preferences_reverse_image_title">Imagen invertida de la cámara</string>
<string name="preferences_scanning_title">Al escanear códigos de barras, descodificar\u2026</string>
<string name="preferences_supplemental_summary">Buscar más información sobre el contenido del código de barras</string>
<string name="preferences_supplemental_title">Buscar más información</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Tallentaa useita kopioita samaa viivakoodia historiassa</string>
<string name="preferences_remember_duplicates_title">Muista kaksoiskappaleet</string>
<string name="preferences_result_title">Tuloksien asetukset</string>
<string name="preferences_reverse_image_summary">Ota käyttöön laitteita etukameraa vain</string>
<string name="preferences_reverse_image_title">Käänteinen kameran kuva</string>
<string name="preferences_scanning_title">Kun skannaus viivakoodeja, dekoodaa\u2026</string>
<string name="preferences_supplemental_summary">Yritä hakea lisätietoja viivakoodin sisältö</string>
<string name="preferences_supplemental_title">Hae lisää tietoa</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Enregistrer dans l\'historique les lectures multiples d\'un même code-barres</string>
<string name="preferences_remember_duplicates_title">Enregistrer les doublons</string>
<string name="preferences_result_title">Paramètres de résultat</string>
<string name="preferences_reverse_image_summary">Activer sur les appareils avec un appareil photo avant seulement</string>
<string name="preferences_reverse_image_title">Image inversée</string>
<string name="preferences_scanning_title">Pendant la numérisation, lire les codes\u2026</string>
<string name="preferences_supplemental_summary">Essayez de retrouver plus d\'informations sur le contenu de codes-barres</string>
<string name="preferences_supplemental_title">Retrouver plus d\'informations</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Tárolni több vizsgál az azonos vonalkód történelem</string>
<string name="preferences_remember_duplicates_title">Emlékezzen duplázik</string>
<string name="preferences_result_title">Találati beállítások</string>
<string name="preferences_reverse_image_summary">Engedélyezze a készülék egy első kamera csak a</string>
<string name="preferences_reverse_image_title">Fordított fényképezőgép</string>
<string name="preferences_scanning_title">A szkennelés a vonalkódok, megfejtése\u2026</string>
<string name="preferences_supplemental_summary">Próbáld meg letölteni több információt a vonalkód tartalma</string>
<string name="preferences_supplemental_title">Letölt További információk</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Conservare scansioni multiple del codice a barre stesso nella Cronologia</string>
<string name="preferences_remember_duplicates_title">Ricordate i duplicati</string>
<string name="preferences_result_title">Impostazioni risultato</string>
<string name="preferences_reverse_image_summary">Attiva su dispositivi con una fotocamera frontale solo</string>
<string name="preferences_reverse_image_title">Invertita dell\'immagine della fotocamera</string>
<string name="preferences_scanning_title">Durante la scansione di codici a barre, decodifica\u2026</string>
<string name="preferences_supplemental_summary">Prova a cercare ulteriori informazioni sul contenuto del codice a barre</string>
<string name="preferences_supplemental_title">Recuperare più informazioni</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">歴史の中で、同じバーコードのストア複数のスキャン</string>
<string name="preferences_remember_duplicates_title">覚えておいて重複</string>
<string name="preferences_result_title">検索結果の設定</string>
<string name="preferences_reverse_image_summary">唯一のフロントカメラを持つデバイスで有効にする</string>
<string name="preferences_reverse_image_title">逆カメラ画像</string>
<string name="preferences_scanning_title">時バーコードスキャン</string>
<string name="preferences_supplemental_summary">バーコード内容についての詳細情報を取得してみてください</string>
<string name="preferences_supplemental_title">取得の詳細情報をもっと見る</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">복수의 같은 바코드를 기록에 저장</string>
<string name="preferences_remember_duplicates_title">중복된 바코드 저장</string>
<string name="preferences_result_title">결과 설정</string>
<string name="preferences_reverse_image_summary">단지 전면 카메라와 장치에 사용</string>
<string name="preferences_reverse_image_title">반대로 카메라 이미지</string>
<string name="preferences_scanning_title">바코드 스캐닝 시\u2026</string>
<string name="preferences_supplemental_summary">바코드 내용에 대한 자세한 정보를 검색하려고</string>
<string name="preferences_supplemental_title">검색 상세 정보</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Onthoud meerdere scans van dezelfde barcode in de geschiedenis</string>
<string name="preferences_remember_duplicates_title">Onthoud duplicaten</string>
<string name="preferences_result_title">Instellingen voor resultaat</string>
<string name="preferences_reverse_image_summary">Staat op apparaten met een camera aan de voorkant alleen</string>
<string name="preferences_reverse_image_title">Omgekeerd beeld van de camera</string>
<string name="preferences_scanning_title">Bij het scannen van barcodes, decodeer\u2026</string>
<string name="preferences_supplemental_summary">Proberen om meer informatie over de inhoud van barcode ophalen</string>
<string name="preferences_supplemental_title">Halen meer info</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Przechowywanie wielu skanowanie kodów kreskowych w tej samej historii</string>
<string name="preferences_remember_duplicates_title">Pamiętaj, duplikaty</string>
<string name="preferences_result_title">Ustawienia rezultatów</string>
<string name="preferences_reverse_image_summary">Włącz na urządzeniach z przedniej kamery tylko</string>
<string name="preferences_reverse_image_title">Odwrócony obraz z kamery</string>
<string name="preferences_scanning_title">Podczas skanowania kodów kreskowych\u2026</string>
<string name="preferences_supplemental_summary">Prosimy spróbować wyszukać więcej informacji na temat kodów kreskowych treści</string>
<string name="preferences_supplemental_title">Pobierz więcej informacji</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Armazenar vários scans do mesmo código de barras em História</string>
<string name="preferences_remember_duplicates_title">Lembre-se de duplicatas</string>
<string name="preferences_result_title">Definições de resultados</string>
<string name="preferences_reverse_image_summary">Use em dispositivos com uma câmera frontal só</string>
<string name="preferences_reverse_image_title">Invertida imagem da câmara</string>
<string name="preferences_scanning_title">Quando a digitalização de códigos de barras, descodificar\u2026</string>
<string name="preferences_supplemental_summary">Tente obter mais informações sobre o conteúdo do código de barras</string>
<string name="preferences_supplemental_title">Obter mais informações</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Сохранять в истории результат сканирования одного и того же штрих-кода</string>
<string name="preferences_remember_duplicates_title">Запоминать дубликаты</string>
<string name="preferences_result_title">Настройки результатов</string>
<string name="preferences_reverse_image_summary">Включить на устройствах с фронтальной камеры только</string>
<string name="preferences_reverse_image_title">Обратный изображения камеры</string>
<string name="preferences_scanning_title">При сканировании штрих-кодов\u2026</string>
<string name="preferences_supplemental_summary">Показывать подробную информацию о штрих-коде</string>
<string name="preferences_supplemental_title">Подробности</string>
@ -137,4 +139,3 @@
<string name="wifi_type_label">Тип</string>
<string name="zxing_url">http://code.google.com/p/zxing</string>
</resources>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Shranjevanje več skandiranje iste črtne kode v zgodovini</string>
<string name="preferences_remember_duplicates_title">Zapomni si dvojnikov</string>
<string name="preferences_result_title">Nastavitve rezultatov branja</string>
<string name="preferences_reverse_image_summary">Omogoči na napravah z sprednjo kamero samo</string>
<string name="preferences_reverse_image_title">Zamenjano kamera slike</string>
<string name="preferences_scanning_title">Ko berete črtne kode, preberi\u2026</string>
<string name="preferences_supplemental_summary">Poskusite pridobiti več informacij o vsebini črtne kode</string>
<string name="preferences_supplemental_title">Naloži Več info</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Lagra flera skanningar av samma streckkod i historia</string>
<string name="preferences_remember_duplicates_title">Kom ihåg dubbletter</string>
<string name="preferences_result_title">Resultatinställningar</string>
<string name="preferences_reverse_image_summary">Aktivera på enheter med en främre kamera</string>
<string name="preferences_reverse_image_title">Återförda kamerabilden</string>
<string name="preferences_scanning_title">När du skannar för streckkoder, avkoda\u2026</string>
<string name="preferences_supplemental_summary">Försök att hämta mer information om streckkoden innehåll</string>
<string name="preferences_supplemental_title">Hämta mer info</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">Aynı kodlu barkodları hatırlama</string>
<string name="preferences_remember_duplicates_title">Aynı barkodları hatırlar</string>
<string name="preferences_result_title">Sonuç ayarları</string>
<string name="preferences_reverse_image_summary">sadece bir ön kamera ile cihazlarda etkinleştirin</string>
<string name="preferences_reverse_image_title">Ters kamera görüntüsü</string>
<string name="preferences_scanning_title">Barkodlar taraması \u2026</string>
<string name="preferences_supplemental_summary">Barkod içeriği hakkında daha fazla bilgi almak için</string>
<string name="preferences_supplemental_title">Daha fazla bilgi</string>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2010 ZXing authors
@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">在历史记录中保存重复记录</string>
<string name="preferences_remember_duplicates_title">记住重复</string>
<string name="preferences_result_title">结果设置</string>
<string name="preferences_reverse_image_summary">设备上启用了前置摄像头只</string>
<string name="preferences_reverse_image_title">反转摄像机的图像</string>
<string name="preferences_scanning_title">条码类型选择</string>
<string name="preferences_supplemental_summary">尝试检索关于条码内容的更多信息</string>
<string name="preferences_supplemental_title">检索更多信息</string>

View file

@ -107,6 +107,8 @@
<string name="preferences_remember_duplicates_summary">存儲多個條碼掃描相同的歷史</string>
<string name="preferences_remember_duplicates_title">記住重複</string>
<string name="preferences_result_title">結果設定</string>
<string name="preferences_reverse_image_summary">啟用設備上只有一個前置攝像頭</string>
<string name="preferences_reverse_image_title">反轉攝像機的圖像</string>
<string name="preferences_scanning_title">當掃描條形碼</string>
<string name="preferences_supplemental_summary">嘗試檢索更多的信息條碼內容</string>
<string name="preferences_supplemental_title">檢索更多的信息</string>

View file

@ -106,6 +106,8 @@
<string name="preferences_play_beep_title">Beep</string>
<string name="preferences_remember_duplicates_summary">Store multiple scans of the same barcode in History</string>
<string name="preferences_remember_duplicates_title">Remember duplicates</string>
<string name="preferences_reverse_image_summary">Enable on devices with a front camera only</string>
<string name="preferences_reverse_image_title">Reversed camera image</string>
<string name="preferences_result_title">Result settings</string>
<string name="preferences_scanning_title">When scanning for barcodes, decode\u2026</string>
<string name="preferences_supplemental_summary">Try to retrieve more information about the barcode contents</string>

View file

@ -28,6 +28,11 @@
android:key="preferences_decode_Data_Matrix"
android:defaultValue="true"
android:title="@string/preferences_decode_Data_Matrix_title"/>
<CheckBoxPreference
android:key="preferences_reverse_image"
android:defaultValue="flse"
android:title="@string/preferences_reverse_image_title"
android:summary="@string/preferences_reverse_image_summary"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/preferences_actions_title">
<CheckBoxPreference

View file

@ -31,14 +31,21 @@ import android.graphics.Bitmap;
* @author dswitkin@google.com (Daniel Switkin)
*/
public final class PlanarYUVLuminanceSource extends LuminanceSource {
private final byte[] yuvData;
private final int dataWidth;
private final int dataHeight;
private final int left;
private final int top;
public PlanarYUVLuminanceSource(byte[] yuvData, int dataWidth, int dataHeight, int left, int top,
int width, int height) {
public PlanarYUVLuminanceSource(byte[] yuvData,
int dataWidth,
int dataHeight,
int left,
int top,
int width,
int height,
boolean reverseHorizontal) {
super(width, height);
if (left + width > dataWidth || top + height > dataHeight) {
@ -50,6 +57,9 @@ public final class PlanarYUVLuminanceSource extends LuminanceSource {
this.dataHeight = dataHeight;
this.left = left;
this.top = top;
if (reverseHorizontal) {
reverseHorizontal(width, height);
}
}
@Override
@ -130,4 +140,17 @@ public final class PlanarYUVLuminanceSource extends LuminanceSource {
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
private void reverseHorizontal(int width, int height) {
byte[] yuvData = this.yuvData;
for (int y = 0, rowStart = top * dataWidth + left; y < height; y++, rowStart += dataWidth) {
int middle = rowStart + width / 2;
for (int x1 = rowStart, x2 = rowStart + width - 1; x1 < middle; x1++, x2--) {
byte temp = yuvData[x1];
yuvData[x1] = yuvData[x2];
yuvData[x2] = temp;
}
}
}
}

View file

@ -39,6 +39,7 @@ public final class PreferencesActivity extends PreferenceActivity
public static final String KEY_DECODE_DATA_MATRIX = "preferences_decode_Data_Matrix";
public static final String KEY_CUSTOM_PRODUCT_SEARCH = "preferences_custom_product_search";
public static final String KEY_REVERSE_IMAGE = "preferences_reverse_image";
public static final String KEY_PLAY_BEEP = "preferences_play_beep";
public static final String KEY_VIBRATE = "preferences_vibrate";
public static final String KEY_COPY_TO_CLIPBOARD = "preferences_copy_to_clipboard";

View file

@ -295,6 +295,9 @@ public final class CameraManager {
Rect rect = getFramingRectInPreview();
int previewFormat = configManager.getPreviewFormat();
String previewFormatString = configManager.getPreviewFormatString();
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean reverseHorizontal = sharedPrefs.getBoolean(PreferencesActivity.KEY_REVERSE_IMAGE, false);
switch (previewFormat) {
// This is the standard Android format which all devices are REQUIRED to support.
// In theory, it's the only one we should ever care about.
@ -302,14 +305,26 @@ public final class CameraManager {
// This format has never been seen in the wild, but is compatible as we only care
// about the Y channel, so allow it.
case PixelFormat.YCbCr_422_SP:
return new PlanarYUVLuminanceSource(data, width, height, rect.left, rect.top,
rect.width(), rect.height());
return new PlanarYUVLuminanceSource(data,
width,
height,
rect.left,
rect.top,
rect.width(),
rect.height(),
reverseHorizontal);
default:
// The Samsung Moment incorrectly uses this variant instead of the 'sp' version.
// Fortunately, it too has all the Y data up front, so we can read it.
if ("yuv420p".equals(previewFormatString)) {
return new PlanarYUVLuminanceSource(data, width, height, rect.left, rect.top,
rect.width(), rect.height());
return new PlanarYUVLuminanceSource(data,
width,
height,
rect.left,
rect.top,
rect.width(),
rect.height(),
reverseHorizontal);
}
}
throw new IllegalArgumentException("Unsupported picture format: " +