答案 0 :(得分:0)
Here is an exampl使图片中的BLUE
颜色透明。
这里我们有一个像蓝色背景的图像,我们想在具有白色背景的Applet中显示它。我们所要做的就是用" Alpha位"来寻找蓝色。设置为不透明并使它们透明。
您可以调整它并使WHITE
颜色透明。
您也可以查看this answer。
答案 1 :(得分:0)
问题是,你想在运行时使透明背景或只是这个图像?如果只是这个,那么您应该使用irfanView之类的任何工具编辑图像以删除背景颜色。只需在此工具中打开此图像,然后将其保存为PNG并勾选保存透明色并取消勾选使用窗口背景颜色,然后按Enter键。之后选择白色。
答案 2 :(得分:0)
答案 3 :(得分:0)
当我必须解决这个问题时,我使用了一个缓冲区...
private IntBuffer buffer;
public void toBuffer(File tempFile){
final Bitmap temp = BitmapFactory.decodeFile(imgSource
.getAbsolutePath());
buffer.rewind(); //setting the buffers index to '0'
temp.copyPixelsToBuffer(buffer);
}
然后您可以简单地编辑缓冲区中的所有像素(int-values)(如https://stackoverflow.com/users/3850595/jordi-castilla所述)...
...将0xFFFFFFFF
(白色和透明)的ARGB设置为0x00??????
(任何颜色都适合,无论如何都是透明的)
所以这是你在缓冲区上编辑透明的代码:
public void convert(){
for (int dy = 0; dy < imgHeight; dy ++){
for (int dx = 0; dx < imgWidth; dx ++ ){
int px = buffer.get();
int a = (0xFF000000 & px) >> 24;
int r = (0x00FF0000 & px) >> 16;
int g = (0x0000FF00 & px) >> 8;
int b = (0x000000FF & px);
int result = px;
if (px == 0xFFFFFFFF){ //only adjust alpha when the color is 'white'
a = 0xFF000000; //transparent?
int result = a | r | g | b;
}
int pos = buffer.position();
buffer.put(pos-1, result);
}
}
稍后您要将图像写回转换后的文件:
public void copyBufferIntoImage(File tempFile) throws IOException {
buffer.rewind();
Bitmap temp = Bitmap.createBitmap(imgWidth, imgHeight,
Config.ARGB_8888);
temp.copyPixelsFromBuffer(buffer);
FileOutputStream out = new FileOutputStream(tempFile);
temp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
}
也许你还想知道如何映射缓冲区?
public void mapBuffer(final File tempFile, long size) throws IOException {
RandomAccessFile aFile = new RandomAccessFile(tempFile, "rw");
aFile.setLength(4 * size); // 4 byte pro int
FileChannel fc = aFile.getChannel();
buffer = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
.asIntBuffer();
}