发送图片:

首先找到具体传递的图片:

private Bitmap getimage(String srcPath) {BitmapFactory.Options newOpts = new BitmapFactory.Options();// 开始读入图片,此时把options.inJustDecodeBounds 设回true了newOpts.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空newOpts.inJustDecodeBounds = false;int w = newOpts.outWidth;int h = newOpts.outHeight;// 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为float hh = 100f;// 这里设置高度为800ffloat ww = 100f;// 这里设置宽度为480f// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可int be = 1;// be=1表示不缩放if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放be = (int) (newOpts.outWidth / ww);} else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放be = (int) (newOpts.outHeight / hh);}if (be <= 0)be = 1;newOpts.inSampleSize = be;// 设置缩放比例// 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了bitmap = BitmapFactory.decodeFile(srcPath, newOpts);return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩}

下面的方法是压缩图片的方法

private Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中int options = 100;while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩baos.reset();// 重置baos即清空baosimage.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中options -= 10;// 每次都减少10}ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片return bitmap;}

将bitmap转化为byte[]数组

public byte[] Bitmap2Bytes(Bitmap bm) {ByteArrayOutputStream baos = new ByteArrayOutputStream();bm.compress(Bitmap.CompressFormat.PNG, 100, baos);return baos.toByteArray();}

格式化byte成字符串

/*** 格式化byte* * @param b* @return*/public static String byte2hex(byte[] b) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B', 'C', 'D', 'E', 'F' };char[] out = new char[b.length * 2];for (int i = 0; i < b.length; i++) {byte c = b[i];out[i * 2] = Digit[(c >>> 4) & 0X0F];out[i * 2 + 1] = Digit[c & 0X0F];}return new String(out);}

接收图片:

首先将传递过来的String转化成byte[]数组:

/*** 反格式化byte* * @param s* @return*/public static byte[] hex2byte(String s) {byte[] src = s.toLowerCase().getBytes();byte[] ret = new byte[src.length / 2];for (int i = 0; i < src.length; i += 2) {byte hi = src[i];byte low = src[i + 1];hi = (byte) ((hi >= 'a' && hi <= 'f') ? 0x0a + (hi - 'a'): hi - '0');low = (byte) ((low >= 'a' && low <= 'f') ? 0x0a + (low - 'a'): low - '0');ret[i / 2] = (byte) (hi << 4 | low);}return ret;}

将byte[]转化成bitmap:

public Bitmap Bytes2Bimap(byte[] b) {if (b.length != 0) {return BitmapFactory.decodeByteArray(b, 0, b.length);} else {return null;}}

使用android中的setImageBitmap方法就可以将接收到的图片显示到手机了。

转载于:https://www.cnblogs.com/yunfang/p/5454345.html

Android—Socket服务端与客户端用字符串的方式互相传递图片相关推荐

  1. Java中Socket通信-服务端和客户端双向传输字符串实现

    场景 什么是socket 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机 ...

  2. php socket(服务端与客户端)demo

    php socket(服务端与客户端)demo完整演示: 环境是:[phpstydy,PHP版本7.3.4nts],一定要开启[sockets]服务. 服务器[index.php](源码复制即可): ...

  3. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  4. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  5. android socket 服务端,Android socket 服务端

    Android socket 服务端 Android 想在Android 上跑一个 socket 服务端.把在java工程里运行起来的代码直接放到android项目里来,开启线程,创建ServerSo ...

  6. Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView

    Socket服务端简单地API: 主要用到以下几个API:ServerSocket用来设置端口号.accept用来和服务端连接.getInputStream用来获取输入流.read用来读取输入流里面的 ...

  7. 封装网络通信 socket 服务端和客户端

    文章目录 1.C++封装的socket 服务端 1.1 代码示例 1.2 代码解析 1.2.1 成员变量 1.2.2 成员函数 1.2.3 构造函数和析构函数 1.2.4 服务端类解析 2.C++封装 ...

  8. 【开源项目】Socket服务端与客户端传输视频文件

    TCP Server端 #define WIN32_LEAN_AND_MEAN #define _WINSOCK_DEPRECATED_NO_WARNINGS#include<windows.h ...

  9. java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包

    使用Java抓取Socket通信TCP数据包 使用WireShark默认使用的是winpcap去抓本地环回的数据包,需要安装npcap再在Wireshark选择本地环回的网卡抓包 在Java-Sock ...

最新文章

  1. 【js】common.jsp的使用
  2. 首发 | 北京踏歌智行完成Pre-A轮数千万融资,辰韬资本领投
  3. WKWebView不显示提示框(Swift)
  4. my paper in EI
  5. 设计模式--建造者模式--简记
  6. 浙江大学远程教育学院计算机考试,浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx...
  7. android按钮在容器下方,使用flex布局解决安卓手机上固定在底部的按钮,在键盘弹起后挡住input输入框的问题...
  8. es文件浏览器怎么用_es文件浏览器电视版下载-es文件浏览器电视tv版下载v4.2.3.4 安卓最新版...
  9. Opencv+Moviepy实现涂鸦视频和视频音轨分离合并操作。
  10. Descriptive Essay文章内容怎么写?
  11. C程序设计——图片文件合成器
  12. 连接交换机太讲究,很多网工总弄不明白
  13. dedecms织梦模板|响应式粉红色母婴月嫂源码 母婴育儿类网站模板(自适应手机版)
  14. 总框架 计算机网络和协议
  15. matlab汽车座椅脉冲振动冲击仿真
  16. 爬取招聘数据 | scrapy 前程无忧51job
  17. 这是最简单解决Android适配之【虚拟按键遮挡布局】
  18. 如何探索晶体管驱动负载
  19. 对话AI之父图灵 百度与ACM牵手“下一幕”
  20. 浙江大学远程教育平台计算机基础知识,浙江大学远程教育计算机作业计算机基础知识题和 Windows知识题...

热门文章

  1. 代码逻辑分析_双十一模块 79.34% 的代码是怎样智能生成的
  2. oracle sequence sql server,SQL Server 实现oracle的sequence方法示例
  3. apache php 调优_Apache的性能优化实例(一)
  4. 360压缩电脑版_震惊!360竟然出了一款这么良心的软件
  5. ggthemes包:丰富ggplot2的表现力
  6. 互联网世界的“人工智能”——探秘“深度学习”的前世今生
  7. jquery ajax html php区别,ajax与jquery的区别是什么
  8. mysql建用户无密码_mysql 新建用户,授权,删除用户,修改密码
  9. 三维计算机视觉(二)--点云滤波
  10. W Zong / A Robust Open-source Algorithm to Detect Onset and Duration of QRS Complexes