?
Solved

Convert DIB to TImage

Posted on 1998-11-19
12
Medium Priority
?
916 Views
Last Modified: 2010-05-18
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
0
Comment
Question by:nititum
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 5
12 Comments
 
LVL 20

Expert Comment

by:Madshi
ID: 1347401
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
 

Author Comment

by:nititum
ID: 1347402
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
 
LVL 20

Expert Comment

by:Madshi
ID: 1347403
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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 1

Expert Comment

by:zac
ID: 1347404
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
 

Author Comment

by:nititum
ID: 1347405
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
 
LVL 20

Expert Comment

by:Madshi
ID: 1347406
No problem...

BTW, what does ASAP mean? As Soon As Processed?
0
 

Author Comment

by:nititum
ID: 1347407
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
 

Author Comment

by:nititum
ID: 1347408
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
 
LVL 20

Expert Comment

by:Madshi
ID: 1347409
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
 

Author Comment

by:nititum
ID: 1347410
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
 

Author Comment

by:nititum
ID: 1347411
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
 
LVL 20

Accepted Solution

by:
Madshi earned 800 total points
ID: 1347412
Thanx for the points...  :-)

Regards, Madshi.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses
Course of the Month8 days, 2 hours left to enroll

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question