服务端比较好处理:
直接返回一个String类型
return Base64.encode(rs.getBytes("BLOB字段名"));
其中,rs为resultSet,接收查询语句的结果
客户端:
byte[] b = Base64.decode(ru,Base64.DEFAULT); Bitmap bitmap = BitMapUtil.getBitmapFromByte(b); if(bitmap!=null) { setBigBitmap(bitmap); }
其中,ru为服务端返回的字符串
BitMapUtil.java:
public class BitMapUtil { /** * 根据本地图片的path获得Bitmap * @param url * @return */ public static Bitmap getBitmapFromByte(byte[] b) { try { BitmapFactory.Options opts = new BitmapFactory.Options(); /** * ALPHA_8:每个像素占用 1byte 内存、 * ARGB_4444:每个像素占用 2byte 内存、 * ARGB_8888:每个像素占用 4byte 内存、 * RGB_565:每个像素占用 2byte 内存。 * Android默认的颜色模式为ARGB_8888 */ opts.inPreferredConfig = Bitmap.Config.RGB_565;// opts.inPurgeable = true; opts.inInputShareable = true; opts.inJustDecodeBounds = true; BitmapFactory.decodeByteArray(b, 0, b.length, opts); opts.inSampleSize = computeSampleSize(opts, -1, 1024*1024); opts.inJustDecodeBounds = false; Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length, opts); return bmp; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 计算 bitmap 尺寸 * @param options * @param minSideLength * @param maxNumOfPixels * @return */ private static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels); int roundedSize; if (initialSize <= 8) { roundedSize = 1; while (roundedSize < initialSize) { roundedSize <<= 1; } } else { roundedSize = (initialSize + 7) / 8 * 8; } return roundedSize; } /** * 计算 bitmap 尺寸 * @param options * @param minSideLength * @param maxNumOfPixels * @return */ private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { double w = options.outWidth; double h = options.outHeight; int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math .sqrt(w * h / maxNumOfPixels)); int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math .floor(w / minSideLength), Math.floor(h / minSideLength)); if (upperBound < lowerBound) { return lowerBound; } if ((maxNumOfPixels == -1) && (minSideLength == -1)) { return 1; } else if (minSideLength == -1) { return lowerBound; } else { return upperBound; } } }
setBigBitmap(Bitmap bitmap)
public void setBigBitmap(Bitmap bigBitmap) { this.bigBitmap = bigBitmap; if(cWidth!=0&&cHeight!=0) { this.setImageBitmap(Bitmap.createScaledBitmap(bigBitmap, cWidth,cHeight, false)); } else { this.setImageBitmap(Bitmap.createScaledBitmap(bigBitmap, this.getWidth(), this.getHeight(), false)); } }
setBigBitmap(Bitmap bitmap)方法是位于一个继承ImageView的类中
这样,这个功能就完成了,需要的时候写个LinearLayout ,add上去就可以了