我正在编写一个Android应用程序,其中两个设备必须通过tcp从库中交换图像。我的问题是,要使用getDrawable(),我的图像必须在Drawable文件夹中?或者我可以使用手机图库中的图像方法?提前感谢您的旅行帮助。如果问题太愚蠢或明显,请耐心等待我,我只是一个新手。
答案 0 :(得分:0)
如果您想使用Drawable
文件夹中的图片,请使用ContextCompat.getDrawable()
。
ImageView imageView = (ImageView)findViewById(R.id.imageUpload);
imageView.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.IMAGE_NAME));
如果您想从图库中挑选和使用图片,请将Intent
与ACTION_PICK
一起使用:
Intent intent = new Intent(Intent.ACTION_PICK);
intent .setType("image/*");
startActivityForResult(intent , REQUEST_CODE);
您将在imageUri
方法中从Intent
获取图片路径onActivityResult()
。最后使用imageView.setImageBitmap()
在bitmap
上显示ImageView
。
@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CODE) {
try {
final Uri imageUri = data.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
imageView.setImageBitmap(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
不要忘记在AndroidManifest.xml
添加权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<强>更新强>
要通过TCP
发送图片,请将bitmap
转换为byte array
,然后使用SOCKET
DataOutputStream
发送<{1}}:
.................
.........................
Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
selectedImage.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] array = bos.toByteArray();
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeInt(array.length);
dos.write(array, 0, array.length);
............
...................
仅供参考,如果您想从bitmap
获取imageView
。试试这个:
//Get bitmap from imageView Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
详细信息:Send Image over TCP in android applications
希望这会有所帮助〜