Convert DIB to TImage

Now I have DIB Handle of image (acquire from scanner), how can I assign (convert) it to TImage Object?
Code would be great!!(200 pts)
Thank you
nititumAsked:
Who is Participating?
 
MadshiConnect With a Mentor Commented:
Thanx for the points...  :-)

Regards, Madshi.
0
 
MadshiCommented:
How about "TImage.picture.bitmap.handle:=YourDIBHandle;" ?
Delphi's TBitmap object (that is included in TImage) is able to handle both types of windows bitmaps, DDB and DIB.

Regards, Madshi.
0
 
nititumAuthor Commented:
First of all I'm sorry that I forgot to tell you that I'm using C++Builder 3, but I think this question is related to VCL and it should be the same as Delphi, So I post my question here.
I tried it (as you told me), it can be assign the handle but there is no bitmap shown.
Do I have to assign the width, height, or any properties of bitmap?
0
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

 
MadshiCommented:
Yes, if you adjust the syntax, C++ Builder should be the same...

I created a little demo application with two TImage objects on it. One without a bitmap. One with a big bitmap (bigger than the image without the bitmap). Then I added a button and in the onClick handler I wrote:

begin
  image2.picture.bitmap.handleType:=bmDIB;  // to make sure we have a DIB handle...
  image1.picture.bitmap.handle:=image2.picture.bitmap.handle;
  // instead of image2.picture.bitmap.handle you should be able to write yourDIBHandle...
  image1.setBounds(image1.left,image1.top,image1.picture.bitmap.width,image1.picture.bitmap.height);
  // this should stay the same...
end;

And it worked. Hope it will do with C++ Builder and with another DIB handle, too.

Regards, Madshi.
0
 
zacCommented:
Nititum,

Madshi's answer is certainly valid for delphi.  I have a visual c++ dll that I wrote to manipulate images.  You pass it a bitmap handle and it returns one (DIB).  I then assign the handle to a TBitmap object in delphi and all of a sudden I have a bitmap...

Good luck

Zac
0
 
nititumAuthor Commented:
Dear Madshi,
Please wait for me to test the code, I have to wait until Mon.
I will tell you the result ASAP ;-)
nititum
0
 
MadshiCommented:
No problem...

BTW, what does ASAP mean? As Soon As Processed?
0
 
nititumAuthor Commented:
Hi, ASAP is As Soon As Posible...
I tried this

Image1->Picture->Bitmap->HandleType = bmDIB;
Image1->Picture->Bitmap->Handle = (*EZ_AcquireNative)(hwnd, CURRENT_UNITS, PIXEL_TYPE, RESOLUTION, 8.27, 11.69);
Image1->SetBounds(Image1->Left,Image1->Top,Image1->Picture->Width,Image1->Picture->Height);

which (*EZ_AcquireNative)(...); is the function that acquire image from scanner and it return type is "HANDLE"
there is a message "Access violation" at Image1->SetBounds..

Can I convert HANDLE to Stream and use Image1->Picture->Bitmap->LoadFromStream(TStream* Stream).
If yes how to convert HANDLE to Stream...
Thank you.
nititum
0
 
nititumAuthor Commented:
Hi, ASAP is As Soon As Posible...
I tried this

Image1->Picture->Bitmap->HandleType = bmDIB;
Image1->Picture->Bitmap->Handle = (*EZ_AcquireNative)(hwnd, CURRENT_UNITS, PIXEL_TYPE, RESOLUTION, 8.27, 11.69);
Image1->SetBounds(Image1->Left,Image1->Top,Image1->Picture->Width,Image1->Picture->Height);

which (*EZ_AcquireNative)(...); is the function that acquire image from scanner and it return type is "HANDLE"
there is a message "Access violation" at Image1->SetBounds..

Can I convert HANDLE to Stream and use Image1->Picture->Bitmap->LoadFromStream(TStream* Stream).
If yes how to convert HANDLE to Stream...
Thank you.
nititum
0
 
MadshiCommented:
I'm not sure where this access violation comes from. Probably the image object wasn't able to handle the handle from EZ_AcquireNative.
Please set a breakpoint on the line Image1->SetBounds... and look if the object Image1.Picture is nil (in C++ 0, I guess).
Then please delete the first line. It won't help. Possibly it will make problems. I think you copied it from my little example. But if you look again at my example, I set the HandleType of Image2, not of Image1.
Then you could try something like
  Image1->SetBounds(Image1->Left,Image1->Top,500,500);
Just to test, if that would work and where the access violation comes from.
You can't easily convert a handle to a stream. You would have to add a full bitmap header and so on. Would be much more difficult than any other kind of transfering the bitmap. Perhaps you could use a BitBlt, but I would prefer using the method I suggested. Of course we have to find out, why it doesn't work yet.
Please report about what's happening if you try my suggestions...

Regards, Madshi.
0
 
nititumAuthor Commented:
Now I found sth. wrong with the EZ_AcquireNative functions, I tried to get the bitmap information from the returned handle but all information are wrong.
I think your code is work, I tried it with others HANDLE.
Please post the answer.
Thank you
Nititum
0
 
nititumAuthor Commented:
Now I found sth. wrong with the EZ_AcquireNative functions, I tried to get the bitmap information from the returned handle but all information are wrong.
I think your code is work, I tried it with others HANDLE. Sorry for taking you into my trouble.
Please post the answer.
Thank you
Nititum
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.