el codigo en C++ es el siguiente, este consigue una imagen del raton y la guarda en un HBITMAP, luego consigo sus bytes y los devuelvo como un tipo JNI:
Código:
luego utilizo java para llamar este codigo remoto y contruir la imagen:JNIEXPORT jbyteArray JNICALL Java_com_local_Cursor_LCursor_getCursorImage(JNIEnv * env,jobject){ CURSORINFO CursorInfo; HBITMAP bitmap; byte bytes[34*34]; jbyteArray jarray=env->NewByteArray(34*34); CursorInfo.cbSize = sizeof(CursorInfo); GetCursorInfo(&CursorInfo); //HICON icon=CopyIcon(CursorInfo.hCursor); HICON icon=CursorInfo.hCursor; bitmap=BitmapFromIcon(icon); if(bitmap != NULL) GetBitmapBits(bitmap,34*34,&bytes); //GetDIBits(NULL,bitmap,0,34*34,&bytes,NULL,DIB_RGB_COLORS); if(bytes != NULL){ env->SetByteArrayRegion(jarray,0,34*34,(const jbyte *)bytes); return jarray; } }
Código:
intente otro codigo que encontre pero no lo entendi, este codigo si me muestra un resultado pero resulta en una imagen negra con unos cuantos pixeles de colores:public static void main(String[] a) { byte[] arr = new LCursor().getLCursorImage(); System.out.println(arr.length); //BufferedImage imag= ImageUtils.read(arr); Image imag = Toolkit.getDefaultToolkit().createImage(arr); ImageIcon icon = null; icon = new ImageIcon(img); JFrame fr = new JFrame(); JLabel la = new JLabel(icon); la.setBackground(Color.BLUE); la.setBounds(0, 0, 500, 500); fr.setBounds(0, 0, 500, 500); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fr.getContentPane().setLayout(null); fr.getContentPane().setBackground(Color.BLUE); fr.getContentPane().add(la); fr.setVisible(true); }
Código:
Cualquier ayuda se les agradecera mucho, mi experiencia en C++ no es muy basta, es mas basica solo que trato de usar funsiones y las busco por internet y trato de entenderlas, cualquier consejo o arreglo a mi codigo seria cool ^__^. int width = 34; int height = 34; BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); int[] raw = new int[arr.length * 4 / 3]; for (int i = 0; i < arr.length / 3; i++) { raw[i] = 0xFF000000 | ((arr[3 * i + 0] & 0xFF) << 16) | ((arr[3 * i + 1] & 0xFF) << 8) | ((arr[3 * i + 2] & 0xFF)); } img.setRGB(0, 0, width, height, raw, 0, width);