나는 첫 번째 안드로이드 응용 프로그램에서 작업을 시작했으며 여러 레이어가있는 이미지를 처리하는 응용 프로그램의 기초를 가지고 있습니다. PNG 형식으로 프로젝트 파일의 플랫 버전을 내보낼 수 있지만 나중에 편집 할 수 있도록 레이어 된 이미지를 저장할 수 있기를 원합니다 (텍스트 기반 레이어와 같은 특정 레이어에 적용된 옵션 포함).자바에서 android.graphics.Bitmap
어쨌든 파일에 작성해야하는 클래스가 'Serializable'이지만 android.graphics.Bitmap이 직렬화 할 수 없다는 사실로 인해로드 블록이 조금이라도 생기게했습니다. 다음 코드는 기본적으로 Bitmap을 PNG로 ByteArray에 출력하고 다시 'readObject'의 일부로 읽어야합니다. 그러나 코드가 실행될 때 - 내가 읽은 'imageByteArrayLength'변수가 출력되는 변수와 동일한 지 확인할 수 있지만 '비트 맵 이미지'는 항상 null입니다.
도움을 주시면 감사하겠습니다. 읽어 주셔서 감사합니다.
private String title;
private int width;
private int height;
private Bitmap sourceImage;
private Canvas sourceCanvas;
private Bitmap currentImage;
private Canvas currentCanvas;
private Paint currentPaint;
private void writeObject(ObjectOutputStream out) throws IOException{
out.writeObject(title);
out.writeInt(width);
out.writeInt(height);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
currentImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] imageByteArray = stream.toByteArray();
int length = imageByteArray.length;
out.writeInt(length);
out.write(imageByteArray);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
this.title = (String)in.readObject();
this.width = in.readInt();
this.height = in.readInt();
int imageByteArrayLength = in.readInt();
byte[] imageByteArray = new byte[imageByteArrayLength];
in.read(imageByteArray, 0, imageByteArrayLength);
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap image = BitmapFactory.decodeByteArray(imageByteArray, 0, imageByteArrayLength, opt);
sourceImage = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
currentImage = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
sourceCanvas = new Canvas(sourceImage);
currentCanvas = new Canvas(currentImage);
currentPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
if (image != null) {
sourceCanvas.drawBitmap(image, 0, 0, currentPaint);
}
}
이 코드는 serializable을 올바르게 사용하는 방법을 나타내지 않는다고 생각합니다. –