Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Convert DIB to TImage

Posted on 1998-11-19
12
Medium Priority
?
917 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
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
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

[Webinar] Lessons on Recovering from Petya

Skyport is working hard to help customers recover from recent attacks, like the Petya worm. This work has brought to light some important lessons. New malware attacks like this can take down your entire environment. Learn from others mistakes on how to prevent Petya like worms.

Question has a verified solution.

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

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses

610 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