‘壹’ java 把一个网络图片转换为base64
这个简单啊
(1)把获取url流转为bitmap
(2)把bitmap再转为base64
public static Bitmap getBitMBitmap(String urlpath) {
Bitmap map = null;
try {
URL url = new URL(urlpath);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in;
in = conn.getInputStream();
map = BitmapFactory.decodeStream(in);
// TODO Auto-generated catch block
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
第二步
/**
* bitmap转为base64
* @param bitmap
* @return
*/
public static String bitmapToBase64(Bitmap bitmap) {
String result = null;
ByteArrayOutputStream baos = null;
try {
if (bitmap != null) {
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
baos.flush();
baos.close();
byte[] bitmapBytes = baos.toByteArray();
result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (baos != null) {
baos.flush();
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
有什么问题提问就好
‘贰’ java中的Bitmap类型通过jni传进cpp后如何转换成IPLImage*类型呢谢谢!
JNI 的基本问题就是解决 Java 和 C++ 代码互相调用的通信问题,在 C++ 代码编写过程中最大的问题莫过于适应其中的代码编写规则,C++调用或是返回的内容必须遵守 JVM 和 C++ 代码的通信规则。
C++ 调用 Java 的一般步骤如下:
获得类:
jclass cls = env->FindClass("com/ldq/Student");
cls 可认为是类的句柄
"com/ldq/Student" 就是类文件,注意不能用 "com.ldq.Student"
获得方法:
jmethodID mid = env->GetMethodID(cls,"<init>","()V");
以上为构造函数,参数是 "<init>" "()V"
jmethodID mid = env->GetMethodID(cls,"getAge","()I");
以上为类的方法,第一个参数是类句柄,第二个参数是方法名字,第三个参数是签名标识
Java类型
符号
boolean Z
byte
B
char
C
short S
int I
long L
float F
double
D
void
V
objects对象 Lfully-qualified-class-name; L类名;
Arrays数组 [array-type [数组类型
methods方法 (argument-types)return-type(参数类型)返回类型
获得对象:
jobject obj=env->NewObject(cls,mid);
以上便获得了一个对象的句柄
获得对象成员变量:
jfieldID fid=env->GetFieldID(cls,"age","I");
以上和获得类方法差不多
操作成员变量:
jint a=env->GetIntField(obj,mid);
age=age+10;
env->SetIntField(obj,fid,a);
返回:
return obj;
下面是本人练习的例子
ExList.java
Java代码
package com.ldq.list;
import java.util.List;
public class ExList {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("-------WifiManager.test()");
System.out.println(WifiManager.test());
System.out.println("-------WifiManager.testArray()");
String[] s1 = WifiManager.testArray();
for (int i = 0; i < s1.length; i++) {
System.out.println(s1[i]);
}
System.out.println("-------WifiManager.testObject()");
System.out.println(WifiManager.testObject().ssid);
System.out.println(WifiManager.testObject().mac);
System.out.println(WifiManager.testObject().level);
System.out.println("-------WifiManager.getScanResultsA()");
ScanResult[] s2 = WifiManager.getScanResultsA();
for (int i = 0; i < s2.length; i++) {
System.out.println(s2[i].ssid);
System.out.println(s2[i].mac);
System.out.println(s2[i].level);
}
System.out.println("-------WifiManager.getScanResults()");
List<ScanResult> list = WifiManager.getScanResults();
System.out.println(list.get(0).ssid);
System.out.println(list.get(0).mac);
System.out.println(list.get(0).level);
}
}
package com.ldq.list;import java.util.List;public class ExList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("-------WifiManager.test()"); System.out.println(WifiManager.test()); System.out.println("-------WifiManager.testArray()"); String[] s1 = WifiManager.testArray(); for (int i = 0; i < s1.length; i++) { System.out.println(s1[i]); } System.out.println("-------WifiManager.testObject()"); System.out.println(WifiManager.testObject().ssid); System.out.println(WifiManager.testObject().mac); System.out.println(WifiManager.testObject().level); System.out.println("-------WifiManager.getScanResultsA()"); ScanResult[] s2 = WifiManager.getScanResultsA(); for (int i = 0; i < s2.length; i++) { System.out.println(s2[i].ssid); System.out.println(s2[i].mac); System.out.println(s2[i].level); } System.out.println("-------WifiManager.getScanResults()"); List<ScanResult> list = WifiManager.getScanResults(); System.out.println(list.get(0).ssid); System.out.println(list.get(0).mac); System.out.println(list.get(0).level); }}
‘叁’ java中如何让byte[]与string类型转换后,保持不变
String.getBytes()是取决于本地缺省编码的,两边不一样就抓瞎了。你这种情况其实是要传byte[],这样硬生生转成String总觉得太危险,一般的做法是弄成比如Base64这样的7bits编码。现成的有sun.misc.BASE64Encoder和sun.misc.BASE64Decoder。
‘肆’ JAVA int数组转bitmap问题
先看 int数组是什么值 。。。。。。
简单地,可以使用BufferedImage的
void
setRGB(int x,
int y,
int rgb)
Sets a pixel in this BufferedImage to the specified
RGB value.
‘伍’ android ,base64转bitmap
1 把图像文件读如byte数组中。
2 然后调用EncodeBase64函数,把Byte数组传入,函数返回Base64的字符串。
以上即可完成Base64转换。
反方向
1 然后调用DecodeBase64函数,把Byte64字符串传入,函数返回Byte数组。
2 把Bye数组内容写入文件,文件名为bitmap位图的bpm文件即可。
‘陆’ android bitmap.getpixels怎么会是负的
在 Java中,JavaVM拥有自动管理内存的功能,Java的GC能够进行垃圾回收,但是如果ImageView使用过多的Bitmap的话,经常会报OOM(内存溢出)。
造成内存溢出及解决方案:
使用BitmapFactory.decodeStream替代createBitmap方法原因是该方法直读取图片字节,调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap。
使用压缩读取技术BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;</ol> BitmapFactory.decodeFile(imageSdUri, options); final int height = options.outHeight; final int width = options.outWidth; options.inSampleSize = 1; int w = 320; int h = 480; h = w*height/width;//计算出宽高等比率 int a = options.outWidth/ w; int b = options.outHeight / h; options.inSampleSize = Math.max(a, b); options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(imageSdUri, options);
3.及时释放Bitamp
Bitmap对象在不使用时,我们应该先调用recycle()释放内存,然后才它设置为null.虽然recycle()从源码上看,调用它应该能立即释放Bitmap的主要内存,但是测试结果显示它并没能立即释放内存。但是我它应该还是能大大的加速Bitmap的主要内存的释放。
‘柒’ 如何把byte转换成base64的byte
由于该问题没有标明是java或者是android的,以下我的解决方法:
android:
byte[]result=Base64.encode(key,Base64.DEFAULT);
其中key 的类型是byte[].此方法是android自带的装换方法。
如果感觉 byte[] result 很不直观,可以使用 new String(result) 方法转化成 字符串类型进行输出。
java语言(不多说说明了,底下代码写的很详细):
//定义一个BASE64Encoder
BASE64Encoderencode=newBASE64Encoder();
//将byte[]转换为base64
Stringbase64=encode.encode("五笔字型电子计算机".getBytes());
//输出base64
System.out.println(base64);
//新建一个BASE64Decoder
BASE64Decoderdecode=newBASE64Decoder();
//将base64转换为byte[]
byte[]b=decode.decodeBuffer(base64);
//输出转换后的byte[]
System.out.println(newString(b));}