Tôi đang làm việc trên ứng dụng đang vẽ trên Canvas tương tự như bản trình diễn Finger Paint từ Android SDK. Vấn đề của tôi là khi tôi đang sử dụng PorterDuff.Mode.CLEAR
. Khi vẽ và Canvas và nếu tôi cố xóa một thứ gì đó, nó hoạt động tốt. Nhưng nếu tôi cố gắng lưu hình ảnh của mình dưới dạng PNG
, thì các nét của công cụ xóa có màu đen và tôi không chắc tại sao điều này lại xảy ra. Dưới đây là một ví dụ những gì tôi đang làm:Android Paint PorterDuff.Mode.CLEAR
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
Eraser:
case ERASE_MENU_ID:
mPaint.setXfermode(new PorterDuffXfermode(
PorterDuff.Mode.CLEAR));
return true;
Và làm thế nào tôi đang ghi hình ảnh:
Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter= new SimpleDateFormat("yyyyMMMddHmmss");
String dateNow = formatter.format(currentDate.getTime());
File dir = new File(mImagePath);
if(!dir.exists())
dir.mkdirs();
File file = new File(mImagePath + "/" + dateNow +".png");
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
Toast.makeText(getApplicationContext(), "File saved at \n"+mImagePath + "/" + dateNow +".png", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
Log.e("Panel", "FileNotFoundException", e);
}
catch (IOException e) {
Log.e("Panel", "IOEception", e);
}
return true;
Và đây là một ví dụ về hình ảnh:
dưới đây là hình vẽ của tôi trông như thế nào trước khi lưu:
và đây là hình ảnh sau khi lưu nó vào thẻ sd:
whats Bitmap.Config bạn sử dụng? RGB_565 hoặc RGBA_8888? – Renard
'Bitmap.Config.ARGB_8888' –
bạn có thể hiển thị mã nơi bạn vẽ lên mBitmap ngay trước khi bạn nén nó không? Ngoài ra PortDuff rõ ràng có nghĩa là màu kết quả là 0 (màu đen). Bạn có cơ hội thiết lập alpha của sơn bằng không? – Renard