0
내 Unity 프로젝트의 내 Java 라이브러리에로드 된 비트 맵을 사용하고 싶습니다.Unity3D에서 기본 Java 비트 맵에 액세스하려면 어떻게해야합니까?
Java에서 C#으로 비트 맵을 전달하려면 어떻게해야합니까?
내 Unity 프로젝트의 내 Java 라이브러리에로드 된 비트 맵을 사용하고 싶습니다.Unity3D에서 기본 Java 비트 맵에 액세스하려면 어떻게해야합니까?
Java에서 C#으로 비트 맵을 전달하려면 어떻게해야합니까?
매우 구체적인 질문이 아니기 때문에 이미지를 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");
}
데이터 :
그리고는 어쩌면이 비슷한을한다. 형식은 (클래스 BufferedImage
에 getType()
방법을 사용하여 얻을 수 있습니다.
가 또는 당신은 또한 자바 네이티브 인터페이스를 사용할 수 있지만 그에보고하지 않은 이미지 유형에 따라 달라집니다.