通过套接字发送位图

时间:2014-07-03 15:18:33

标签: android sockets bitmap

我在Bitmap上发送Socket(从文件解码),我担心我无法write() byte[]所有Bitmap bitmap = BitmapFactory.decodeFile(path); int cBytes = bitmap.getByteCount(); ByteBuffer cBuffer = ByteBuffer.allocate(cBytes); bitmap.copyPixelsToBuffer(cBuffer); bitmap.recycle(); byte[] bitmapArray = cBuffer.array(); 单个电话。

byte[]

这就是我获取Socket的方法。那么通过{{1}}发送这个数组的方法是什么,我应该把它分成块吗?喜欢实现队列或其他东西;或者是否有任何课程可以帮我做这个发送?

2 个答案:

答案 0 :(得分:0)

我使用loopj的异步http库,但是我在这里做的是:

public void add_image_android(final Bitmap image) 
{ 
    final ByteArrayInputStream bs;
    final Bitmap targetBitmap;

    Matrix matrix = new Matrix();
    matrix.postRotate(90);
    targetBitmap = Bitmap.createBitmap(image, 0, 0, 
                                  image.getWidth(), image.getHeight(), 
                                  matrix, true);


    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    targetBitmap.compress(CompressFormat.JPEG, 100, bos); 
    byte[] bitmapdata = bos.toByteArray();
    bs = new ByteArrayInputStream(bitmapdata);
    targetBitmap.recycle();

    String url = "http://www.somesite.com/api.php?callback=add_image";

    RequestParams params = new RequestParams();
    params.put("file", bs);
    params.put("is_android","Y");
    client.post(url, params, new JsonHttpResponseHandler() 
    {
        @Override
        public void onSuccess(JSONObject response)
        {
            try 
            {
                bs.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            ((ResponseListener)_mainContext).add_image_android_response(response.toString());
            return; 
        }
        @Override
        public void onFailure(Throwable e) 
        {
            fireToast("api error:"+e);
            Log.d("api error:",e.toString());
        }

    });
}

答案 1 :(得分:0)

您可以在一个write()中编写它。不需要分块。你的问题将是记忆,而不是写作。