2017-01-11 43 views

回答

0

由於你不是很具體的問題,我只是假設你有你的圖像加載爲BufferedImage。所以這裏有一個關於如何去做的建議:

使用JNA Library可以更好地訪問c#的資源。

,然後也許做一些與此類似:

BufferedImage someImage; 
long somePointer; 

DataBuffer data = someImage.getData().getDataBuffer(); 
int[] bankOffsets = data.getOffsets(); 
long offset = 0; 
com.sun.jna.Pointer ptr = new com.sun.jna.Pointer(somePointer); 
switch(data.getDataType()) { 
case DataBuffer.TYPE_BYTE: 
    byte[][] bbanks = ((DataBufferByte) data).getBankData(); 
    for (int i = 0; i < bbanks.length; i++, offset += bbanks[i].length - bankOffsets[i]) 
     ptr.write(offset, bbanks[i], bankOffsets[i], bbanks[i].length - bankOffsets[i]); 
break; 
case DataBuffer.TYPE_DOUBLE: 
    double[][] dbanks = ((DataBufferDouble) data).getBankData(); 
    for (int i = 0; i < dbanks.length; i++, offset += (dbanks[i].length - bankOffsets[i])*8) 
     ptr.write(offset, dbanks[i], bankOffsets[i], dbanks[i].length - bankOffsets[i]); 
break; 
case DataBuffer.TYPE_FLOAT: 
    float[][] fbanks = ((DataBufferFloat) data).getBankData(); 
    for (int i = 0; i < fbanks.length; i++, offset += (fbanks[i].length - bankOffsets[i])*4) 
     ptr.write(offset, fbanks[i], bankOffsets[i], fbanks[i].length - bankOffsets[i]); 
break; 
case DataBuffer.TYPE_INT: 
    int[][] ibanks = ((DataBufferInt) data).getBankData(); 
    for (int i = 0; i < ibanks.length; i++, offset += (ibanks[i].length - bankOffsets[i])*4) 
     ptr.write(offset, ibanks[i], bankOffsets[i], ibanks[i].length - bankOffsets[i]); 
break; 
case DataBuffer.TYPE_SHORT: 
    short[][] sbanks = ((DataBufferShort) data).getBankData(); 
    for (int i = 0; i < sbanks.length; i++, offset += (sbanks[i].length - bankOffsets[i])*2) 
     ptr.write(offset, sbanks[i], bankOffsets[i], sbanks[i].length - bankOffsets[i]); 
break; 
case DataBuffer.TYPE_USHORT: 
    short[][] usbanks = ((DataBufferUShort) data).getBankData(); 
    for (int i = 0; i < usbanks.length; i++, offset += (usbanks[i].length - bankOffsets[i])*2) 
     ptr.write(offset, usbanks[i], bankOffsets[i], usbanks[i].length - bankOffsets[i]); 
break; 
case DataBuffer.TYPE_UNDEFINED: 
    throw new IllegalArgumentException("Unsupported data type"); 
} 

寫應該是所有的像素顏色值數據。格式取決於圖像類型(可以用getType()方法的類BufferedImage獲得。

另外,您也可以使用Java本地接口,但我沒有看過成。