Попробуйте так, если вам нужно получить округленное изображение ..
Ваш класс MainActivity.java
public class MainActivity extends Activity {
private static final int REQUEST_CODE = 1;
private Bitmap bitmap;
private ImageView imageView;
Bitmap roundedBitmapImage;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.result);
}
public void pickImage(View View) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
try {
// We need to recycle unused bitmaps
if (bitmap != null) {
bitmap.recycle();
}
InputStream stream = getContentResolver().openInputStream(
data.getData());
bitmap = BitmapFactory.decodeStream(stream);
stream.close();
/* Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Bitmap bitmap2=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Bitmap resultingImage=Bitmap.createBitmap(320, 480, bitmap1.getConfig());
Canvas canvas = new Canvas(resultingImage);
Paint paint = new Paint();
paint.setAntiAlias(true);
Path path=new Path();
path.lineTo(150, 0);
path.lineTo(230, 120);
path.lineTo(70, 120);
path.lineTo(150, 0);
canvas.drawPath(path, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap2, 0, 0, paint);*/
//-------> compositeImageView.setImageBitmap(resultingImage);
// Use this when to provide any shape to image i.e Fit image to any shape.
// under mentioned taking reference from Rounder class. Finally changing image in round shape.
// Here we are passing reference bitmap.
roundedBitmapImage = new Rounder().getRoundedShape(bitmap);
imageView.setImageBitmap(roundedBitmapImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
И ваш класс округлителя ..
/ ** Этот класс обрезает изображение до круглой формы * /
public class Rounder {
public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
int targetWidth = 125;
int targetHeight = 125;
Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(targetBitmap);
Path path = new Path();
path.addCircle(((float) targetWidth - 1) / 2,
((float) targetHeight - 1) / 2,
(Math.min(((float) targetWidth), ((float) targetHeight)) / 2),
Path.Direction.CCW);
canvas.clipPath(path);
Bitmap sourceBitmap = scaleBitmapImage;
canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(),
sourceBitmap.getHeight()), new Rect(0, 0, targetWidth,
targetHeight), null);
return targetBitmap;
}
}
Как правило, RPC обеспечивает более высокий уровень абстракции, чем некоторые другие средства межпроцессного взаимодействия. Это, возможно, делает его проще в использовании, чем примитивы более низкого уровня. Для этой абстракции вы можете заплатить некоторое снижение производительности из-за маршалинга / демаршалинга и, возможно, придется иметь дело с дополнительной сложностью конфигурации для простых сценариев.
Возможно, вас заинтересует этот тезис (pdf) Джеки Silcock, в котором обсуждаются различия между передачей сообщений, RPC и распределенной разделяемой памятью в отношении нескольких различных показателей производительности и реализации. Вы также можете прочитать одну из статей, основанных на диссертации: Передача сообщений, удаленные вызовы процедур и Распределенная общая память как коммуникация Парадигмы для распределенных систем (pdf)
Вы говорите о RPC и обмене сообщениями? Как в (обычно) асинхронном обмене сообщениями? Если это то, о чем вы говорите, то обмен сообщениями имеет тенденцию быть более надежным за счет сложности и дополнительной инфраструктуры.
Самый простой пример - если у вас есть сценарий, в котором вы RPC-> RPC-> RPC, вы в конечном итоге имея стек вызовов глубиной 3 процесса / машины. Любой из этих процессов / машины может выйти из строя во время обработки, и весь стек раскрутится.
Если бы вы обменивались сообщениями, фактическая связь между процессами намного меньше. Вы передаете сообщение, и вы уже в пути. Теперь, если один из процессов выйдет из строя, есть большая вероятность того, что он будет перезапущен с того места, где он остановился, поскольку обычно сообщение все еще находится в очереди где-то, ожидая, пока новый процесс его получит.