Why can't it show a whole bitmap in listctrl in icon form
-
I want to show bitmaps in icon form as previewings,just like the example thumbnail in cp,but I found that the item is just a section of the bitmap. 1.I import a bitmap to resource,modify its ID to IDB_BITMAP1. 2.I accociate a listctrl to m_listctrl. 3.I create: CImageList m_imagelist. 4.The last I do this in OnInitDialog(): //Load a bitmap CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); m_imagelist->Create(200,200,ILC_COLOR24,1,4); m_imagelist->Add(&bitmap,RGB(255,0,0)); m_listctrl.SetImageList(m_imagelist,LVSIL_NORMAL); m_listctrl.InsertItem(0,"1",0); The result is the item in listctrl is just section of the bitmap,why? Thanks~
-
I want to show bitmaps in icon form as previewings,just like the example thumbnail in cp,but I found that the item is just a section of the bitmap. 1.I import a bitmap to resource,modify its ID to IDB_BITMAP1. 2.I accociate a listctrl to m_listctrl. 3.I create: CImageList m_imagelist. 4.The last I do this in OnInitDialog(): //Load a bitmap CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); m_imagelist->Create(200,200,ILC_COLOR24,1,4); m_imagelist->Add(&bitmap,RGB(255,0,0)); m_listctrl.SetImageList(m_imagelist,LVSIL_NORMAL); m_listctrl.InsertItem(0,"1",0); The result is the item in listctrl is just section of the bitmap,why? Thanks~
Chen-XuNuo wrote:
just section of the bitmap
You can choose between 16*16 or 32*32 icons for a listctrl, I think. I suppose you r bitmap is shrinked to 32*32. (not sure, however).
Constantly "Saving the day" should be taken as a sign of organizational dysfunction rather than individual skill - Ryan Roberts[^]
-
Chen-XuNuo wrote:
just section of the bitmap
You can choose between 16*16 or 32*32 icons for a listctrl, I think. I suppose you r bitmap is shrinked to 32*32. (not sure, however).
Constantly "Saving the day" should be taken as a sign of organizational dysfunction rather than individual skill - Ryan Roberts[^]
What do you mean~?And how can I do? Besides,if I change the m_imagelist.Create to m_imagelist.Create(300,300,...),it shows a bigger section of the bitmap~
-
What do you mean~?And how can I do? Besides,if I change the m_imagelist.Create to m_imagelist.Create(300,300,...),it shows a bigger section of the bitmap~
-
What do you mean~?And how can I do? Besides,if I change the m_imagelist.Create to m_imagelist.Create(300,300,...),it shows a bigger section of the bitmap~
Can you see a bitmap correct or no
WhiteSky
-
I want to show bitmaps in icon form as previewings,just like the example thumbnail in cp,but I found that the item is just a section of the bitmap. 1.I import a bitmap to resource,modify its ID to IDB_BITMAP1. 2.I accociate a listctrl to m_listctrl. 3.I create: CImageList m_imagelist. 4.The last I do this in OnInitDialog(): //Load a bitmap CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); m_imagelist->Create(200,200,ILC_COLOR24,1,4); m_imagelist->Add(&bitmap,RGB(255,0,0)); m_listctrl.SetImageList(m_imagelist,LVSIL_NORMAL); m_listctrl.InsertItem(0,"1",0); The result is the item in listctrl is just section of the bitmap,why? Thanks~
If your bitmap is 500x500, but your image list is designed to hold images that are 200x200, you will only see the upper-left of the bitmap. That is expected behavior - the Imagelist control will not automatically scale images for you - you will have to do that yourself. Also note that since you specified
ILC_COLOR24
when creating the Imagelist control, setting a Mask value in the call toAdd(...)
will have no effect - Masks only work on 8-bit (or lower) bitmaps. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFiles -
If your bitmap is 500x500, but your image list is designed to hold images that are 200x200, you will only see the upper-left of the bitmap. That is expected behavior - the Imagelist control will not automatically scale images for you - you will have to do that yourself. Also note that since you specified
ILC_COLOR24
when creating the Imagelist control, setting a Mask value in the call toAdd(...)
will have no effect - Masks only work on 8-bit (or lower) bitmaps. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesI don't know my bitmap's size,but it must larger than 200*200. You said I should do it myself,but how can I do?To change the bitmap's size? Besides,what is the purpose of the mask? Thanks~
-
Can you see a bitmap correct or no
WhiteSky
I can see it,but only a section of the bitmap. If I set 200*200,and the program shows 200*200 of the bitmap,how can I change the bitmap size?
-
If your bitmap is 500x500, but your image list is designed to hold images that are 200x200, you will only see the upper-left of the bitmap. That is expected behavior - the Imagelist control will not automatically scale images for you - you will have to do that yourself. Also note that since you specified
ILC_COLOR24
when creating the Imagelist control, setting a Mask value in the call toAdd(...)
will have no effect - Masks only work on 8-bit (or lower) bitmaps. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesJames R. Twine wrote:
Also note that since you specified ILC_COLOR24 when creating the Imagelist control, setting a Mask value in the call to Add(...) will have no effect - Masks only work on 8-bit (or lower) bitmaps.
It works fine on 24-bit bitmaps if you use the ILC_MASK flag... m_imagelist->Create(200,200,ILC_COLOR24|ILC_MASK,1,4); m_imagelist->Add(&bitmap,RGB(255,0,0)); Try it :) Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
-
I don't know my bitmap's size,but it must larger than 200*200. You said I should do it myself,but how can I do?To change the bitmap's size? Besides,what is the purpose of the mask? Thanks~
You can use some software, like MSPaint, or the GIMP[^], to scale the images outside of the application. If you need to scale it internally, you can use GDI/GDI+ to draw the bitmap scaled directly into the appropriate area of the Imagelist control. This is a bit tricky if you have a large number of images. Basically, you preallocate the space for the images in the Imagelist control using the
ImageList_SetImageCount(...)
macro, extractIMAGEINFO
structures for each image "space" using the ImageList_GetImageInfo(...) macro, and then drawing the scaled-down image directly into theIMAGEINFO::hbmImage
bitmap area. Got all that? :P Also, the "mask" is a color (or an area of the image) that is considered transparent when the image is drawn. In other words, the "mask" color (or area) is not drawn when the image is drawn onto the control. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFiles -
James R. Twine wrote:
Also note that since you specified ILC_COLOR24 when creating the Imagelist control, setting a Mask value in the call to Add(...) will have no effect - Masks only work on 8-bit (or lower) bitmaps.
It works fine on 24-bit bitmaps if you use the ILC_MASK flag... m_imagelist->Create(200,200,ILC_COLOR24|ILC_MASK,1,4); m_imagelist->Add(&bitmap,RGB(255,0,0)); Try it :) Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
Actually, you need that parameter for masks to work correctly even in 8-bit images. For any images with a higher bit depth, I have had too much trouble trying to get mixed colors exactly right for that to work correctly for me. Couple that with art software that does dithering (with higher depth images) when not asked to and the problem gets real bad real quick. Was easier to just build a mask bitmap and set it directly in the control. Peace!
-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFiles -
Actually, you need that parameter for masks to work correctly even in 8-bit images. For any images with a higher bit depth, I have had too much trouble trying to get mixed colors exactly right for that to work correctly for me. Couple that with art software that does dithering (with higher depth images) when not asked to and the problem gets real bad real quick. Was easier to just build a mask bitmap and set it directly in the control. Peace!
-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesJames R. Twine wrote:
I have had too much trouble trying to get mixed colors exactly right for that to work correctly for me. Couple that with art software that does dithering (with higher depth images) when not asked to and the problem gets real bad real quick.
:-D That's when I'd hand the problem off to the art department (ie, my graphic-designer girlfriend LOL). There's 16777216 colors...how hard can it be to find ONE to use as a transparent color? :laugh: Cheers!
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
-
You can use some software, like MSPaint, or the GIMP[^], to scale the images outside of the application. If you need to scale it internally, you can use GDI/GDI+ to draw the bitmap scaled directly into the appropriate area of the Imagelist control. This is a bit tricky if you have a large number of images. Basically, you preallocate the space for the images in the Imagelist control using the
ImageList_SetImageCount(...)
macro, extractIMAGEINFO
structures for each image "space" using the ImageList_GetImageInfo(...) macro, and then drawing the scaled-down image directly into theIMAGEINFO::hbmImage
bitmap area. Got all that? :P Also, the "mask" is a color (or an area of the image) that is considered transparent when the image is drawn. In other words, the "mask" color (or area) is not drawn when the image is drawn onto the control. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesThanks~ But I am confused that I don't know how to resize the bitmaps before insert them to imagelist,is there any fuctions to do this? And I have refer to the example http://www.codeproject.com/listctrl/thumbnail.asp?df=100&forumid=1951&fr=51[^] in cp.I found it do nothing to resize the bitmaps,but they are automaticly showed in thumbnails.Why`:confused:
James R. Twine wrote:
extract IMAGEINFO structures for each image "space" using the ImageList_GetImageInfo(...) macro, and then drawing the scaled-down image directly into the IMAGEINFO::hbmImage bitmap area.
What is the purpose of this?I can only get the information in imagelist through this.And if I change the IMAGEINFO what I get from it ,nothing changed. X|
-
Thanks~ But I am confused that I don't know how to resize the bitmaps before insert them to imagelist,is there any fuctions to do this? And I have refer to the example http://www.codeproject.com/listctrl/thumbnail.asp?df=100&forumid=1951&fr=51[^] in cp.I found it do nothing to resize the bitmaps,but they are automaticly showed in thumbnails.Why`:confused:
James R. Twine wrote:
extract IMAGEINFO structures for each image "space" using the ImageList_GetImageInfo(...) macro, and then drawing the scaled-down image directly into the IMAGEINFO::hbmImage bitmap area.
What is the purpose of this?I can only get the information in imagelist through this.And if I change the IMAGEINFO what I get from it ,nothing changed. X|
You need to look at the code for that project before asking... That project uses GDI+ code to generate the thumbnails and then adds the thumbnails to the imagelist control used by the listview control.
Bitmap img( A2W(strPath) );
Bitmap* pThumbnail = static_cast(img.GetThumbnailImage(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, NULL, NULL)
);
// attach the thumbnail bitmap handle to an CBitmap object
pThumbnail->GetHBITMAP(NULL, &hBmp);
pImage = new CBitmap();
pImage->Attach(hBmp);
// add bitmap to our image list
m_ImageListThumb.Replace(i, pImage, NULL);The
Bitmap::GetThumbnailImage(...)
function scales the image for you returning a new one. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFiles -
You need to look at the code for that project before asking... That project uses GDI+ code to generate the thumbnails and then adds the thumbnails to the imagelist control used by the listview control.
Bitmap img( A2W(strPath) );
Bitmap* pThumbnail = static_cast(img.GetThumbnailImage(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, NULL, NULL)
);
// attach the thumbnail bitmap handle to an CBitmap object
pThumbnail->GetHBITMAP(NULL, &hBmp);
pImage = new CBitmap();
pImage->Attach(hBmp);
// add bitmap to our image list
m_ImageListThumb.Replace(i, pImage, NULL);The
Bitmap::GetThumbnailImage(...)
function scales the image for you returning a new one. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesOh~~~~~~~~~~~~I seldom do the GDI+ and I haven't use the "Bitmap" before.When I do this in my project: HBITMAP hBitmap=LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1)); m_imagelist->Create(200,200,ILC_COLOR24|ILC_MASK,1,4); Bitmap img(hBitmap); Bitmap* pThumbnail = static_cast(img.GetThumbnailImage(200, 200, NULL, NULL)); pThumbnail->GetHBITMAP(NULL, &hBitmap); CBitmap bitmap; bitmap.Attach(hBitmap); m_imagelist->SetImageCount(1); m_imagelist->Replace(0,&bitmap,NULL); m_listctrl.SetImageList(m_imagelist,LVSIL_NORMAL); m_listctrl.InsertItem(0,"1",0); There are errors: D:\Code\I Do\ListControl2\ListControl2Dlg.cpp(143) : error C2065: 'Bitmap' : undeclared identifier D:\Code\I Do\ListControl2\ListControl2Dlg.cpp(143) : error C2146: syntax error : missing ';' before identifier 'img' D:\Code\I Do\ListControl2\ListControl2Dlg.cpp(143) : error C2065: 'img' : undeclared identifier D:\Code\I Do\ListControl2\ListControl2Dlg.cpp(144) : error C2065: 'pThumbnail' : undeclared identifier D:\Code\I Do\ListControl2\ListControl2Dlg.cpp(144) : error C2061: syntax error : identifier 'Bitmap' pThumbnail->GetHBITMAP(NULL, &hBitmap); :sigh:
-
You need to look at the code for that project before asking... That project uses GDI+ code to generate the thumbnails and then adds the thumbnails to the imagelist control used by the listview control.
Bitmap img( A2W(strPath) );
Bitmap* pThumbnail = static_cast(img.GetThumbnailImage(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, NULL, NULL)
);
// attach the thumbnail bitmap handle to an CBitmap object
pThumbnail->GetHBITMAP(NULL, &hBmp);
pImage = new CBitmap();
pImage->Attach(hBmp);
// add bitmap to our image list
m_ImageListThumb.Replace(i, pImage, NULL);The
Bitmap::GetThumbnailImage(...)
function scales the image for you returning a new one. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesMaybe I should include the head file gdiplus.h` Do you have it?Please send to my email~ Thanks~
-
You need to look at the code for that project before asking... That project uses GDI+ code to generate the thumbnails and then adds the thumbnails to the imagelist control used by the listview control.
Bitmap img( A2W(strPath) );
Bitmap* pThumbnail = static_cast(img.GetThumbnailImage(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, NULL, NULL)
);
// attach the thumbnail bitmap handle to an CBitmap object
pThumbnail->GetHBITMAP(NULL, &hBmp);
pImage = new CBitmap();
pImage->Attach(hBmp);
// add bitmap to our image list
m_ImageListThumb.Replace(i, pImage, NULL);The
Bitmap::GetThumbnailImage(...)
function scales the image for you returning a new one. Peace!-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesMm..I have downloaded the gdiplus.h ~But many new errors occur~My god` Basically the errors are about the file gdiplusinit.h~ For example: c:\program files\microsoft visual studio\vc98\include\gdiplusinit.h(39) : error C2065: 'ULONG_PTR' : undeclared identifier
-
Mm..I have downloaded the gdiplus.h ~But many new errors occur~My god` Basically the errors are about the file gdiplusinit.h~ For example: c:\program files\microsoft visual studio\vc98\include\gdiplusinit.h(39) : error C2065: 'ULONG_PTR' : undeclared identifier
You need to download the entire platform SDK (which may now be called the Windows SDK?), and then install and configure it. Then you should be able to use GDI+. Peace!
-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFiles -
You need to download the entire platform SDK (which may now be called the Windows SDK?), and then install and configure it. Then you should be able to use GDI+. Peace!
-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFilesI have installed it.And I find that GDI+ is a good thing. Do you know how to use Bitmap( Class type, String resource )? Because my bitmap is in the resource,but I don't know how to set the parameter "Class type"~
-
I have installed it.And I find that GDI+ is a good thing. Do you know how to use Bitmap( Class type, String resource )? Because my bitmap is in the resource,but I don't know how to set the parameter "Class type"~
You can use the thumbnail project mentioned earlier for examples on how to use some parts of GDI+. The GDI+ documentation is going to be where you need to go now for more details on how to use it. Good luck! Peace!
-=- James
Please rate this message - let me know if I helped or not! * * *
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
See DeleteFXPFiles