BitmapFactory.decodeStream无法解码ftp中的png类型

时间:2012-07-10 10:18:48

标签: android ftp png imageview

  • 我的错误是什么?我如何通过FTP显示png?

我是Android的新手,并试图从不同的连接/来源显示图像。 然后我已经显示了从drawable和HTTP加载的图像。

现在,我尝试从FTP显示,当我使用时,我收到消息“--- decoder-> decode return 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”,完全显示。

但当位图加载文件类型“PNG”时,log cat会说“--- decoder-&gt; decode返回false”。

感谢您的建议......

    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;
    }

0 个答案:

没有答案