Solved

Convert DIB to TImage

Posted on 1998-11-19
12
911 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
  • 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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 200 total points
ID: 1347412
Thanx for the points...  :-)

Regards, Madshi.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
code issue 8 186
QRReport  TQrmemo vertical stretching 1 57
Error E2158 compiling with Delphi XE10 Seattle 2 127
Slow Restore if incremental backups using RDiff.exe 4 39
Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

726 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