2016-06-15 2 views
1

SignaturePad.PCL Nuget 패키지를 사용 중이므로 플러그인에서 Draw Points를 가져 와서 이미지를 만드는 Stream을 복구 할 수 있습니다. 그런 다음 이미지를 웹 서비스에 기본 64 문자열로 전달하고 웹 응용 프로그램에 표시합니다. 그럼 난 변환이 차이가 이유를 알고이Xamarin.Forms MemoryStream 조작. Android가 iOS와 다른 이유는 무엇입니까?

//This works on android but not iOS 
string base64Str = Convert.ToBase64String(((MemoryStream) theStream).ToArray()); 


//Works on iOS but not android 
string base64Str = Convert.ToBase64String(StreamConvert(theStream)); 
private byte[] StreamConvert(Stream stream){ 
    using (var ms = new MemoryStream()) 
     { 
      stream.CopyTo(ms); 
      return ms.ToArray(); 
     }​ 
    } 


//For both I use this, unless someone else can figure out a cross platform solution 
string base64Str = Convert.ToBase64String(Device.OS == TargetPlatform.Android ? ((MemoryStream) theStream).ToArray() : StreamConvert(theStream)); 

사람처럼 작동 64 문자열을 기반으로 얻을 수 있었던 것을 발견?

+0

이 예제에서는 System.IO.Stream입니다. –

+0

당신은 이해하지 못합니다. System.IO.Stream으로 변환하기 전에 android에서 'theStream '유형을, ios에서'theStream '을 알고 싶습니다. – jzeferino

답변

2

SignaturePad의 소스 코드 (found here)를 빠르게 살펴보고 Android 및 iOS 버전이 생성 한 이미지를 어떻게 처리하는지 검토했습니다.

가장 큰 차이점은 안드로이드에서는 Bitmap 오브젝트를 얻고 iOS에서는 SignaturePad의 GetImage() 메소드에서 UIImage 오브젝트를 얻습니다. here for Android GetImagehere for iOS GetImage()을 참조하십시오.

아이폰 OS

의 첫 번째 UIImage (see UIImage here)로 드릴 다운 보자.

UIImage이 이미지를 생성하는 방법을 살펴보면 NSData 개체를 반환하는 여러 가지 방법이 있습니다 (ToJPEG()ToPNG()).

NSDataAPI reference에서 살펴보면 ToStream() 메서드는 Stream 개체를 반환합니다. 이제 안드로이드 위에

좋아

안드로이드!

발견 된 내용은 BitmapAPI docs here입니다. Bitmap (CreateBitmap 메서드에서), Buffer (CopyBuffer 메서드에서) 또는 Compress/CompressAsync 중 하나가 나타납니다.

CompressCompressAsyncMemoryStream과 같은 쓰기 가능한 스트림 객체를 세 번째 매개 변수로 전달하게합니다. 여기에 (jzeferino의 코멘트에서) 예입니다 :

var stream = new System.IO.MemoryStream(); imageBitpmap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);

는 희망이 당신에게 이미지를 제공 할 때 SignaturePad가 무엇을하고 있는지 명확히하는 데 도움이됩니다.

+0

안드로이드에서 당신은'var stream = new System.IO.MemoryStream(); imageBitpmap.Compress (Bitmap.CompressFormat.Jpeg, 100, stream);'답변을 업데이트하십시오. – jzeferino

+0

이것은 매우 통찰력이 있습니다. 랜스 고마워. –

관련 문제