我需要将图像背景转换为透明图像,并将该图像保存在外部存储器中。下面是我厌倦的代码,但图像变为黑色背景,而不是透明。
这个指定pix [index] = Color.TRANSPARENT是否正确?
public Bitmap createTransparentBitmapFromBitmap( int replaceThisColor) {
try {
// furniture1.JPG is the image to be converted.
InputStream is = getAssets().open("furniture1.JPG");
Bitmap bitmap = BitmapFactory.decodeStream(is);
if (bitmap != null) {
int picw = bitmap.getWidth();
int pich = bitmap.getHeight();
int[] pix = new int[picw * pich];
bitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);
for (int y = 0; y < pich; y++) {
// from left to right
for (int x = 0; x < picw; x++) {
int index = y * picw + x;
int r = (pix[index] >> 16) & 0xff;
int g = (pix[index] >> 8) & 0xff;
int b = pix[index] & 0xff;
if (pix[index] == replaceThisColor) {
pix[index] = Color.TRANSPARENT;
} else {
break;
}
}
// from right to left
for (int x = picw - 1; x >= 0; x--) {
int index = y * picw + x;
int r = (pix[index] >> 16) & 0xff;
int g = (pix[index] >> 8) & 0xff;
int b = pix[index] & 0xff;
if (pix[index] == replaceThisColor) {
pix[index] = Color.TRANSPARENT;
} else {
break;
}
}
}
Bitmap bm = Bitmap.createBitmap(pix, picw, pich,Bitmap.Config.ARGB_8888);
Log.i("DATABASE", "mutable: "+bm.isMutable());
is.close();
return bm;
}
return null;
}catch(Exception ex) {
Log.i("DATABASE", "Problem updating picture", ex);
}
return null;
}
// Creates an transparent image and save to SD card.
public void createTransparent() {
// Replace WHITE color to TRANSPARENT color
Bitmap bm = createTransparentBitmapFromBitmap(Color.WHITE);
//Save the converted image to SD card
boolean externalMounted= isExternalStorageWritable();
File myDir=null;
if(externalMounted)
{
String root = Environment.getExternalStorageDirectory().toString();
myDir = new File(root + "/VirtualHome/Ikea","aaa1.jpeg");
OutputStream os;
try {
os = new FileOutputStream(myDir);
bm.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.flush();
os.close();
}catch(IOException ex) {
Log.i("DATABASE", "Problem updating picture", ex);
}
}
}