yura91 писал(а):то есть это передается ссылка на картинку верно?? а сам обьект Bitmap то есть джепег файл прямо без всяких ссылок можно передать??как это будет выглядеть??
В аndroid есть такой интерфейс
Serializable его может реализовать любой объект и по сути все, что происходит - упаковка любых данных в формат удобный для передачи, потом после приема выполняется unserialize и все становится на круги своя... но это действительно не много странно.
Но примерно так:
[syntax=java5]
private String title;
private int sourceWidth, currentWidth;
private int sourceHeight, currentHeight;
private Bitmap sourceImage;
private Canvas sourceCanvas;
private Bitmap currentImage;
private Canvas currentCanvas;
private Paint currentPaint;
protected class BitmapDataObject implements Serializable {
private static final long serialVersionUID = 111696345129311948L;
public byte[] imageByteArray;
}
/** Included for serialization - write this layer to the output stream. */
private void writeObject(ObjectOutputStream out) throws IOException{
out.writeObject(title);
out.writeInt(currentWidth);
out.writeInt(currentHeight);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
currentImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
BitmapDataObject bitmapDataObject = new BitmapDataObject();
bitmapDataObject.imageByteArray = stream.toByteArray();
out.writeObject(bitmapDataObject);
}
/** Included for serialization - read this object from the supplied input stream. */
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
title = (String)in.readObject();
sourceWidth = currentWidth = in.readInt();
sourceHeight = currentHeight = in.readInt();
BitmapDataObject bitmapDataObject = (BitmapDataObject)in.readObject();
Bitmap image = BitmapFactory.decodeByteArray(bitmapDataObject.imageByteArray, 0, bitmapDataObject.imageByteArray.length);
sourceImage = Bitmap.createBitmap(sourceWidth, sourceHeight, Bitmap.Config.ARGB_8888);
currentImage = Bitmap.createBitmap(sourceWidth, sourceHeight, Bitmap.Config.ARGB_8888);
sourceCanvas = new Canvas(sourceImage);
currentCanvas = new Canvas(currentImage);
currentPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
thumbnailPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
thumbnailPaint.setARGB(255, 200, 200, 200);
thumbnailPaint.setStyle(Paint.Style.FILL);
}
[/syntax]
read и write object соотвественно сериализация и десериализация объекта, только теперь при распаковке нужно не String принимать а
BitmapDataObject, но тут гораздо логичнее испольовать простые пути вроде
content://
P.S. Сериализация тут точно не желательна лучше конвертировать изображение в byte array:
[syntax=java5]
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
[/syntax]
и потом забирать:
[syntax=java5]
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);
image.setImageBitmap(bmp);
[/syntax]
Опять же если при конвертировании используется изображение из assets - просто заменяете ресурсы на пути. И опять же принимая объект из bundle обращаете внимание на тип ожидаемого значения.
>> а сам обьект Bitmap то есть джепег файл прямо без всяких ссылок можно передать
путь в файловой системе это тоже ссылка но доступна не через url:// а через file:// или к примеру:
[syntax=java5]
File imgFile = new File(“/sdcard/Images/test_image.jpg”);
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
}
[/syntax]
и дальше делаете с ним что хотите, думаю что вполне можно
imgFile.getAbsolutePath() передавать, а декодировать уже на клиенте.