BitmapFactory.decodeStream não pode decodificar o tipo png do ftp
Qual foi o meu erro? Como eu mostro png do FTP?
Eu sou newby para android e tentar mostrar imagem de diferença connection / source. Então eu já mostro imagem qual carga de drawable e HTTP.
Agora, eu tento mostrar do FTP, eu recebo a mensagem "--- decoder-> decode retornou false" quando eu uso ..BitmapFactory.decodeStream(ins, null, options);
Então eu encontrei a solução ..
static class FlushedInputStream extends FilterInputStream {
public FlushedInputStream(InputStream inputStream) {
super(inputStream);
}
@Override
public long skip(long n) throws IOException {
long totalBytesSkipped = 0L;
while (totalBytesSkipped < n) {
long bytesSkipped = in.skip(n - totalBytesSkipped);
if (bytesSkipped == 0L) {
int b = read();
if (b < 0) {
break; // we reached EOF
} else {
bytesSkipped = 1; // we read one byte
}
}
totalBytesSkipped += bytesSkipped;
}
return totalBytesSkipped;
}
}
Em seguida, ele pode carregar / decodificar o tipo de arquivo "Jpeg, jpg", há show completamente.
Mas o log cat diz "--- decoder-> decode retornou false" quando o bitmap carregar o tipo de arquivo "PNG" novamente.
Obrigado pelo conselho ...
ImageView bmImage = (ImageView) findViewById(R.id.faceImageView);
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
Bitmap bm = LoadImage(image_URL, bmOptions);
bmImage.setImageBitmap(bm);
...
private Bitmap LoadImage(String URL, BitmapFactory.Options options) {
Bitmap bitmap = null;
InputStream in = null;
FlushedInputStream fIns = null;
try {
if (isFTP) {
in = downloadFile("");
if (remoteFile.toLowerCase().contains(".png")) {
fIns = new FlushedInputStream(in);
bitmap = BitmapFactory.decodeStream(fIns, null, options);
// byte[] bMapArray = new byte[buf.available()];
// buf.read(bMapArray);
// bitmap = BitmapFactory.decodeByteArray(bMapArray, 0,
// bMapArray.length);
} else {
fIns = new FlushedInputStream(in);
bitmap = BitmapFactory.decodeStream(fIns);
}
} else { // HTTP
in = OpenHttpConnection(URL);
fIns = new FlushedInputStream(in);
bitmap = BitmapFactory.decodeStream(fIns);
}
in.close();
} catch (IOException e1) {
}
return bitmap;
}
public synchronized InputStream downloadFile(String localfilename) {
InputStream inputStream = null;
String user = "aaa";
String pass = "8888";
String host = "xxx.xxx.xxx.xxx";
try {
FTPClient mFTPClient = new FTPClient();
mFTPClient.connect(host);
mFTPClient.login(user, pass);
mFTPClient.enterLocalPassiveMode();
mFTPClient.changeWorkingDirectory("/DroidPic");
String[] aa = mFTPClient.listNames();
String strTmp = "";
do {
strTmp = aa[(new Random()).nextInt(aa.length)];
} while (remoteFile == strTmp);
remoteFile = strTmp;
inputStream = mFTPClient.retrieveFileStream(remoteFile);
} catch (Exception ex) {
Toast.makeText(this, "Err:" + ex.getMessage(), Toast.LENGTH_LONG)
.show();
}
return inputStream;
}