我创建了一个C#服务器,通过套接字将一个Bitmap发送到android客户端。该位图不断更新,因为它是一个视频源。
服务器C#
private void send_data()
{
ImageConverter converter = new ImageConverter();
byte[] sendBytes = (byte[])converter.ConvertTo(master.picturebox_master.Image, typeof(byte[]));
string_master_frame = System.Text.Encoding.UTF8.GetString(sendBytes);
string_master_frame = Convert.ToBase64String(sendBytes);
data = string_master_frame + "\n";
tcpServer1.Send(data);
}
客户端Android
@Override
protected Void doInBackground(Void... arg0) {
Socket socket = null;
try {
socket = new Socket(dstAddress, dstPort);
Scanner r = new Scanner(new InputStreamReader(socket.getInputStream()));
while(true) {
valores[26] = r.nextLine();
publishProgress(valores[26]);
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
byte[] decodedString = Base64.decode(values[26],Base64.NO_WRAP);
Bitmap master_bitmap = BitmapFactory.decodeByteArray(decodedString,0,decodedString.length);
master_frame.setImageBitmap(master_bitmap);
}
发送第一帧,Android客户端正确显示。但是当下一帧出现时,Android客户端崩溃。
错误:
处理:com.example.tiago.java_android,PID:826 java.lang.IllegalArgumentException:bad base-64 在android.util.Base64.decode(Base64.java:161) 在android.util.Base64.decode(Base64.java:136) 在android.util.Base64.decode(Base64.java:118) 在com.example.tiago.java_android.Cliente.onProgressUpdate(Cliente.java:228) 在com.example.tiago.java_android.Cliente.onProgressUpdate(Cliente.java:28) 在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:656) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5431) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:914) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
我虽然valores [26]数据被破坏了,但事实并非如此。我正确地得到了数据。
我使用http://codebeautify.org/base64-to-image-converter检查我是否正确获取了数据。
有什么想法吗?