BitmapFactory.decodeStream не может декодировать тип png из ftp
What was my mistake? How I show png from FTP?
Я новичок для Android и пытаюсь показать изображение с разницы между подключением / источником. Тогда я уже показываю изображение, которое загружается из drawable и HTTP.
Теперь я пытаюсь показать с FTP, я получаю сообщение "--- decoder-"> "decode возвращено false" когда я использую ..BitmapFactory.decodeStream(ins, null, options);
Тогда я нашел решение ..
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;
}
}
Затем он может загрузить / декодировать тип файла "Jpeg, jpg", там шоу покажут полностью.
Но журнал cat скажет: "--- decoder-> декодер вернул false" когда растровое изображение загружает тип файла "PNG" снова.
Спасибо за совет ...
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;
}