[英]How can I access a native Java bitmap from Unity3D?
我想使用在我的Unity項目中的本機Java庫中加載的位圖。
如何將位圖從Java傳遞到C#?
由於您的問題不是很具體,我只假設您已將圖像加載為BufferedImage
。 因此,這里有個建議:
使用JNA庫可以更好地訪問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");
}
寫入的數據應該是所有像素顏色值。 格式取決於圖像類型(可以使用BufferedImage
類中的getType()
方法獲得getType()
。
另外,您也可以使用Java本機接口,但我沒有對此進行研究。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.