Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (498)
Games in Android Showcase (115)
games submitted by our members
Games in WIP (562)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
   Home   Help   Search   Login   Register   
  Show Posts
Pages: [1]
1  Java Game APIs & Engines / Java 2D / Re: Marshalling Java image bytes to C++ BITMAP in JNI technology on: 2011-11-06 12:36:26
Thanks for everybody

Please look at me. I find a logical solution for my problem. I just want to say someone that can't help, don't write message. because if everyone can help us, they've forgotten base question with your messages.Thanks

Theagentd and Zendar had good suggetions, but my solution is near to Theagentd advice.

First things that we have to do is change Java Image object to send to JNI wrapper. You can understand the reason of it in below address:

http://www.jguru.com/faq/view.jsp?EID=31065

Also in below link you can understand how to use PixelGrabber in Java framework:

http://download.oracle.com/javase/1.4.2/docs/api/java/awt/image/PixelGrabber.html

After prepare Java Image as int[] you can send this parameter to JNI wrapper and make a C++ BITMAP from that . For understand way to make BITMAP you can see below like too:

http://www.codeguru.com/forum/showthread.php?t=453758

Also in the following, you can see my codes in tow parts(Java and JNI wrapper)

Java code: change Java Image to int[] for JNI warpper

Image image = null;                                                 
try {
     File file = new File("c:/image.jpg");
     image = ImageIO.read(file);
}
catch (MalformedURLException ex) {
     Logger.getLogger(SmartTest.class.getName()).log(Level.SEVERE, ex.getMessage());
} catch (IOException ex) {
     Logger.getLogger(SmartTest.class.getName()).log(Level.SEVERE, ex.getMessage());
}

// Image grabbing
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(image, x, y, w, h, pixels, 0, w);
try {
     pg.grabPixels();
}catch (InterruptedException e) {
     System.err.println("interrupted waiting for pixels!");
     return;
}
if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
     System.err.println("image fetch aborted or errored");
     return;
}


JNI wrapper code(C++): change int[] of Java Image to C++ BITMAP


HBITMAP CreateBitmapFromPixel( HDC hDC, UINT uWidth, UINT uHeight, UINT uBitsPerPixel, LPVOID pBits )
{
     HBITMAP m_HBitmap = NULL;
    if ( !uWidth || !uHeight || !uBitsPerPixel )
   {
        return m_HBitmap;//hBitmap;
    }
    LONG lBmpSize = uWidth * uHeight * uBitsPerPixel / 8;    
    BITMAPINFO bmpInfo = { 0 };
    bmpInfo.bmiHeader.biBitCount = uBitsPerPixel;
    bmpInfo.bmiHeader.biHeight = uHeight;
    bmpInfo.bmiHeader.biWidth = uWidth;
    bmpInfo.bmiHeader.biPlanes = 1;
    bmpInfo.bmiHeader.biSizeImage = uWidth * uHeight * uBitsPerPixel / 8;
    bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    // Pointer to access the pixels of bitmap       
    UINT * pPixels = 0;
    /*hBitmap*/m_HBitmap = CreateDIBSection( hDC, (BITMAPINFO *)&bmpInfo, DIB_RGB_COLORS, (void **)& pPixels , NULL, 0);
    if ( !m_HBitmap )
        return m_HBitmap;//hBitmap; // return if invalid bitmaps
    SetBitmapBits( m_HBitmap, lBmpSize,pBits);
    return m_HBitmap;
}

sample code to change Java Image to BITMAP in JNIwrapper :

int len = env->GetArrayLength(pixels); //pixels is jintArray and get from input parameter
jint* jarr;
jarr = env->GetIntArrayElements(pixels,FALSE);
HBITMAP hImg = CreateBitmapFromPixel(pFront->bmp.hdcColor,(DWORD)cx,(DWORD)cy,32,jarr);
if( hImg != NULL )
{
     DIBSECTION dib;
     BITMAPINFO bi;
     ::GetObject( hImg, sizeof(dib), &dib );
     bi.bmiHeader   = dib.dsBmih;

     // HDC is Hardware Device context. For understand how to set it please read Microsoft MSDN
     // w and h in here are belongs to BITMAP buffer based on you HDC
     ::SetDIBitsToDevice(HDC, 0, 0,w,h,0, 0, 0,dib.dsBm.bmHeight,dib.dsBm.bmBits,&bi,DIB_RGB_COLORS);
 
     DeleteObject( hImg );
}

Cheer up...
Sam
2  Java Game APIs & Engines / Java 2D / Re: Marshalling Java image bytes to C++ BITMAP in JNI technology on: 2011-11-01 05:55:55
Hello Chromanoid
Thanks for your guide.

Unfortunately the base of our project is JNI technology and migration from JNI to JNA consume a lot of cost and time.
I think the JNA do not call Clibrary directly and maybe it use JNI on background to do JNA functionalities. Of course I don't have good knowladge about JNA but I think with logical reasons it maybe using JNI. If you know an Ebook or an useful reference to JNA, I'll happy if you'll introduce it to read.

Friends : I'm waiting to your another helps(Transfer Image from Java to C++)
Sam
3  Java Game APIs & Engines / Java 2D / Re: Marshalling Java image bytes to C++ BITMAP in JNI technology on: 2011-10-31 21:00:56
Cylab Thanks for your advises

All address were general but my issues is really special. Of course I didn't understand Google sample codes.
I want send an Image of Java to C++ side. I saw a post in your site about sending image from C++ to Java2D side.
If you saw similar solution which it's helpful to me, Please guide me to see some example to understand what I have to do. I'm almost being familiar with JNI concept but I didn't face to such problem to sending image bytes of Java to C++ wrapper and I don't know how I Can make a share memory between Java part and Native codes. But I know Java Image is an object and C++ BITMAP has some structures to making a Bitmap and I think they aren't related. I think Mr. Theagentd in this post said true because we have to send colors array not Image object address in memory because they're incompatible. If I made mistake please tell me.

Friends, I'm looking forward to your replies
4  Java Game APIs & Engines / Java 2D / Re: Marshalling Java image bytes to C++ BITMAP in JNI technology on: 2011-10-31 13:50:35
Hello Zendar

You have a good solution for me. Thank you very much. I want to arrive like your solution

Could you guide me to have a reference or sample code to do it

I'm looking forward to help you
Sam
5  Java Game APIs & Engines / Java 2D / Re: Marshalling Java image bytes to C++ BITMAP in JNI technology on: 2011-10-31 13:40:38
Yes. If it can be implement from Java language I followed it. But it's a specific printer that we bought and it has a driver(.DLL file) which handle our functionalities. I have to making a JAVA wrapper to work with this printer with JNI technology.
6  Java Game APIs & Engines / Java 2D / Re: Marshalling Java image bytes to C++ BITMAP in JNI technology on: 2011-10-31 10:52:35
Thanks Cylab and Theagentd for your response

It's not important to Java part how image has been read, because it's a buffered image and I want to send it like a stream data to lower layer(C++ wrapper). Maybe it can be an array of image bits or an Object.

The goal in this project is making a C++ BITMAP to sending to a printer with Java wrapper.
I'm trying to find a way to marshalling between Java image class to C++ BITMAP to transfer image bytes for printing.

If you have knowladge about JNI marshalling, I'll happey to hear your guide.
7  Java Game APIs & Engines / Java 2D / Marshalling Java image bytes to C++ BITMAP in JNI technology on: 2011-10-31 10:17:38
Hello everybody

I want to send Java image bytes to c++ with JNI technology and then change the byte array to BITMAP in c++.

How can I do that?

Please tell me your guides

Sam
Pages: [1]
 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

BurntPizza (28 views)
2014-09-21 02:42:18

BurntPizza (18 views)
2014-09-21 01:30:30

moogie (19 views)
2014-09-21 00:26:15

UprightPath (27 views)
2014-09-20 20:14:06

BurntPizza (29 views)
2014-09-19 03:14:18

Dwinin (45 views)
2014-09-12 09:08:26

Norakomi (74 views)
2014-09-10 13:57:51

TehJavaDev (101 views)
2014-09-10 06:39:09

Tekkerue (50 views)
2014-09-09 02:24:56

mitcheeb (71 views)
2014-09-08 06:06:29
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!