I am writting code in c++, gdi+.
I make use of Image's GetThumbnail() method to get thumbnail. However, I need to convert it into HBITMAP. I know the following code can get GetHBITMAP:
Bitmap* img;
HBITMAP temp;
Color color;
img->GetHBITMAP(color, &temp); // if img is Bitmap* this works well。
But how can I convert Image* into Bitmap* fast? Many thanks!
Actually, now I have to use the following method:
int width = sourceImg->GetWidth(); // sourceImg is Image*
int height = sourceImg->GetHeight();
Bitmap* result = new Bitmap(width, height,PixelFormat32bppRGB);
Graphics gr(result);
//gr.SetInterpolationMode(InterpolationModeHighQuality);
gr.DrawImage(sourceImg, 0, 0, width, height);
I really don't know why they do not provide Image* - > Bitmap* method. but let GetThumbnail() API return a Image object....
Image* img = ???;
Bitmap* bitmap = new Bitmap(img);
Edit: I was looking at the.NET reference of GDI+, but here is how .NET implements that constructor.
using (Graphics graphics = null)
{
graphics = Graphics.FromImage(bitmap);
graphics.Clear(Color.Transparent);
graphics.DrawImage(img, 0, 0, width, height);
}
All those function are avaliable in the C++ version of GDI+
First you may try dynamic_cast
as in many cases (if not most - at least in my use cases) Image
is being implemented by Bitmap
. So
Image* img = getThumbnail( /* ... */ );
Bitmap* bitmap = dynamic_cast<Bitmap*>(img);
if(!bitmap)
// getThumbnail returned an Image which is not a Bitmap. Convert.
else
// getThumbnail returned a Bitmap so just deal with it.
However if somehow it is not (bitmap
will be nullptr
) then you could try a more general solution.
For example save the Image
to a COM IStream
using Save
method and then use Bitmap::FromStream
to create Bitmap
from that stream.
A simple COM IStream
could be created using the CreateStreamOnHGlobal
WinAPI function. However this is not efficient, especially for larger streams, but to test the idea it will do.
There are also other similar solutions which can be deduced from reading Image
and Bitmap
documentation.
Sadly I haven't tried it on my own (with Image
which is not a Bitmap
) so I am not entirely sure.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With