2016-05-27 18 views
0

私は、モバイルカメラから写真をアップロードするプロジェクトを作成しようとしていますが、フロントカメラで撮影したときは逆さになります(特にAndroid)。私はExif.PCLナゲットパッケージを使用するための提案を読んだが、同じものを実装する方法は知らない。誰もがこれで私を助けることができますか? おかげxamarinフォームでExif.PCLを実装する方法は?

答えて

0

背景

私は私のアプリケーションのいずれかで同じ問題を抱えていました。異なるアプローチを試みた後、私は現在の実装でいくつかの問題を発見しました。一般的に私はXLabsを使用していますが、これにはメディアピッキング機能があります。

問題

それらが取られた後、それは、画像を拡大縮小してautorotatingのサポートを欠いていたすべての最初の。それはあなたの質問です。ですから、まず画像が取り出されるとすぐに後処理を実装しなければなりませんでした。

第2に、AndroidとXamarin.Formsに問題があります。これは、Androidでのアクティビティの処理方法が原因です。 Android上で動作する方法は、実際には別のアプリケーションでホストされているCameraActivityまたはPhotoGalleryActivityを起動することです。これらのアクティビティは、システムメモリの部分的な量を使用しています。このオペレーティングシステムは、あなたのアプリを含む非フォールルプロセスを殺すために努力します:)このためのWorkarroundは、写真を最初から作成することによって、したがって、私は決して私のアプリを残しません、アンドロイドランタイムは私のアプリケーションを殺すことはありません。このすべてをを考慮すると

ソリューション

は、私が撮影の私自身の流れを実装しました。ソースコードHEREが見つかります。基本的なアーキテクチャは次のとおりです: 私はIImageServiceを作成しました。カメラやライブラリから画像を取り出す方法があります。

public interface IImageService 
    { 
     Task<IImage> GetImageFromLibrary(); 
     Task<IImage> GetImageFromCamera(); 
    } 

次に、これをiOSとAndroid用に個別に実装し、依存性注入を使用しました。 iOSではXLabsの実装を使用しているので、問題なく動作します。 Androidの場合、Camera and Libraryから画像をピックするのをサポートするいくつかのアクティビティを作成しました。CameraActivityPhotoGaleryActivity、これは基本的にネイティブ画像ピッキングアクティビティに置き換わります。

イメージを選択した後、スケーリングと回転処理を行います。 iOSの場合GetScaledAndRotatedImageメソッドを持つUIImageToolbox静的クラスを作成しました。 Androidの場合BitmapToolbox staticクラスでGetScaledAndRotatedBitmapメソッドを持っています。

私のサンプルアプリケーションでは、IImageServiceの使用法を示すためにImageViewModelImagePageを作成しました。それは簡単であるはずです。

サンプルアプリケーションの使用方法は?

私は小さな発言をさせてください。 iOSとAndroidの両方でXLabsの実装のみを使用し、BitmapToolboxUIImageToolboxを使用してスケーリングと回転を実装することができます。これはあなたの質問に対する答えです。しかし、あなたのアプリがAndroid上で安定しているようにしたい場合は、ちょっとしたことをする必要があります。

  1. フォーム、ドロイド、iOSプロジェクトに必要なすべてのナゲットパッケージをインストールします。サンプルアプリケーションで使用されているパッケージは、packages.config各プロジェクトのファイル
  2. ブロードキャストメッセージ用にMvvmCross Messengerプラグインを使用しています。代替があれば簡単に置き換えることができます。しかし、それを使用する場合は、依存関係を登録することを忘れないでください。AppDelegateMainActivity

    DependencyService.Register();

  3. サンプルアプリケーションからフォーム、iOS、Androidプロジェクトに必要なクラスを追加します。 Resharperを使って名前空間を修正することができます。

  4. xamlファイルの場合、ドラッグアンドドロップフォームプロジェクトの既定のビルドアクションとカスタムツールは、間違った値に設定されています。 drawabledrawable-xxhdpilayoutvaluesフォルダから必要なリソースを追加UpdateDesignTimeXaml

  5. アンドロイドプロジェクトの場合:このようにXAMLファイルをクリックし、[プロパティ]を選択し、リソース組み込みにビルドアクション設定、およびのMSBuildのカスタムツール。

  6. grid_cell_photo_galery_item.axmlファイルで、名前空間を修正しました。あなたのネームスペースでImageSample.Droid.Views.SquareRelativeLayoutを置き換えてください。

  7. Androidの場合、Androidプロジェクトを右クリックし、プロパティを選択してAndroidマニフェストに移動し、CAMERA、READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE権限を追加します。

  8. Androidの場合は、Androidプロジェクトを右クリックしてプロパティを選択し、[詳細設定]に移動して[最大ヒープサイズ]を1Gなどに設定します。これはPhotoGalaryActivityが画像を表示するのに相当量のメモリを使用し、すべてだDependencyService.Register<MediaPicker>();

- iOS用

  • は、MediaPickerAppDelegate中のために依存性の注入を追加することを忘れないでください。

  • 関連する問題