Ti SDK 6.0 이상에서 Ti.Blob.imageAsResized()에 버그가 있네요.

안녕하세요?

안드로이드 기기에서 가로 (또는 세로) 해상도가 4096 이상인 이미지를 imageView에 표시하지 못해서
갤러리에서 선택한 이미지 해상도가 4096을 초과하면 4096으로 resize하여 사용하고 있습니다.
(resize하지 않고 imageView에 표시할 방법이 있으면 좀 알려주세요 ^^)

var resizedImageData = imageData.imageAsResized(newImageWidth, newImageHeight);

위와 같이 Ti.Blob 타입인 이미지의 imageAsResized()를 실행하면
Ti SDK 5.5.1에서는 정상적으로 작동하는데
Ti SDK 6.0 이상에서는 아래와 같은 에러가 납니다.

Uncaught Attempt to invoke virtual method ‘char[] java.lang.String.toCharArray()’ on a null object reference

위 에러를 출력하는 코드 직전에 로그 메시지로 이미지 타입을 표시해보면 **[object TiBlob]**으로 표시되고 imageAsResized는 **function imageAsResized() { [native code] }**로 표시되는 것을 확인했습니다.

다른 분들은 이런 문제 없으신가요?

1 Like

일단은 속도가 약간 느리긴 하지만 imageFactory.imageAsResized()를 대안으로 사용하고 있습니다.

공유감사합니다.

android의 surfaceview가 메모리 한계로 4096이 넘는 이미지를 표시하지 못하죠…

저도 이미지를 촬영하거나 불러온 다음에, 안드로이드에서는 아래 모듈을 이용해서 rotate도 바로잡고, 라사이즈도 해서 사용합니다.

rotateResizeImage 라는 method가 아주 유용합니다.

var nativePath = photoBlob.nativePath;
fhImageFactory.rotateResizeImage(nativePath, 1080, 95);
var resizedImage = Ti.Filesystem.getFile(nativePath).read();

이런식으로 사용합니다.

1 Like

이미지를 rotate 하신다고 하시니까 생각나는 질문이 있습니다.

안드로이드 기기의 경우에 카메라로 촬영한 사진이 wide인지 narrow인지 구분을 못하고 가로/세로 해상도가 서로 바뀌어서 넘어오는 경우가 있는데, (갤러리나 로컬 영역에 저장된 이미지는 wide / narrow가 정상적으로 설정되어 있습니다.)
해상도 외에 사진의 wide/narrow를 식별하는 방법이 있는지요?

저 모듈의 rotateResizeImage 메쏘드가 그렇게 잘못 돌아가 있는 사진을 바로 잡아줍니다.
exif와 실제 이미지를 비교해서, 실제 이미지는 누워있는데 exif로만 세워져있다고 써있는 경우 바로 잡아줍니다.

fhImageFactory.rotateResizeImage()를 사용하니까 깔끔하게 해결되네요. :slight_smile:

감사합니다.

1 Like