2014-10-18 34 views
1

任何人都可以帮助我吗?我是android新手,需要将位图保存为tga文件。如何将位图保存为tga文件?

而且我还需要知道如何加载tga文件。我试过使用这个(Android版本)Java TGA loader 但我得到的只是一个纯白色屏幕。

如果有人可以建议一个图书馆或方式来做到这一点,请回复。

谢谢。

回答

0

如果android.graphics.Bitmap是你在找什么,那就是:

public static void writeTGA(Bitmap src, String path) throws IOException { 

    ByteBuffer buffer = ByteBuffer.allocate(src.getRowBytes() * src.getHeight()); 
    src.copyPixelsToBuffer(buffer); 
    boolean alpha = src.hasAlpha(); 
    byte[] data; 

    byte[] pixels = buffer.array(); 
    if (pixels.length != src.getWidth() * src.getHeight() * (alpha ? 4 : 3)) 
     throw new IllegalStateException(); 

    data = new byte[pixels.length]; 

    for(int i=0;i < pixels.length; i += 4){// rgba -> bgra 
     data[i] = pixels[i+2]; 
     data[i+1] = pixels[i+1]; 
     data[i+2] = pixels[i]; 
     data[i+3] = pixels[i+3]; 
    } 

    byte[] header = new byte[18]; 
    header[2] = 2; // uncompressed, true-color image 
    header[12] = (byte) ((src.getWidth() >> 0) & 0xFF); 
    header[13] = (byte) ((src.getWidth() >> 8) & 0xFF); 
    header[14] = (byte) ((src.getHeight() >> 0) & 0xFF); 
    header[15] = (byte) ((src.getHeight() >> 8) & 0xFF); 
    header[16] = (byte) (alpha ? 32 : 24); // bits per pixel 
    header[17] = (byte) ((alpha ? 8 : 0) | (1 << 4)); 

    File file = new File(path); 
    RandomAccessFile raf = new RandomAccessFile(file, "rw"); 
    raf.write(header); 
    raf.write(data); 
    raf.setLength(raf.getFilePointer()); // trim 
    raf.close(); 
}