bmpfromico
- Silvio.Falconi
- Posts: 7119
- Joined: Thu Oct 18, 2012 7:17 pm
bmpfromico
CAn I load a temporary Bmp from an Ico and show it on Image Control ?
If Yesy, how ?
If Yesy, how ?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
- Antonio Linares
- Site Admin
- Posts: 42430
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 17 times
- Been thanked: 52 times
- Contact:
Re: bmpfromico
I just sent an email to Manuel Alvarez as he is a master with GDI+ and surely it may help for what you want to do.
Lets wait for his answer
Lets wait for his answer
- Silvio.Falconi
- Posts: 7119
- Joined: Thu Oct 18, 2012 7:17 pm
Re: bmpfromico
Sorry Antonio,
I have on Listview many items
when I add a item I made
nImage := Icon_Read(cNewfile)
ILADDICON( oImageListSmall:hImageList, nImage )
nImage := max(0,ILADDICON( oImageListBig:hImageList, nImage ) )
DestroyIcon(nImage)
oItem = TListViewItem():New( oList )
oItem:cText = cNewfile
oItem:nImage = nImage
oItem:Create()
we have the icon ... of a file
then I saw there is a function Made from Daniel
HB_FUNC( BMPFROMICON )
{
HICON hIcon = ( HICON ) hb_parnl( 1 );
HDC HDCMem = GetDC( GetDesktopWindow() );
HDC hDC = CreateCompatibleDC( HDCMem );
HBITMAP hBitmap = CreateCompatibleBitmap(HDCMem, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDC, hBitmap);
DrawIcon(hDC, 0, 0, hIcon);
SelectObject(hDC, hOldBitmap);
DeleteDC(hDC);
hb_retnl( ( LONG ) hBitmap );
}
then I thinked
ico := nImage
hBmp := BmpFromIcon( ico )
now How I can make to show hBmp into Image control ?
I have on Listview many items
when I add a item I made
nImage := Icon_Read(cNewfile)
ILADDICON( oImageListSmall:hImageList, nImage )
nImage := max(0,ILADDICON( oImageListBig:hImageList, nImage ) )
DestroyIcon(nImage)
oItem = TListViewItem():New( oList )
oItem:cText = cNewfile
oItem:nImage = nImage
oItem:Create()
we have the icon ... of a file
then I saw there is a function Made from Daniel
HB_FUNC( BMPFROMICON )
{
HICON hIcon = ( HICON ) hb_parnl( 1 );
HDC HDCMem = GetDC( GetDesktopWindow() );
HDC hDC = CreateCompatibleDC( HDCMem );
HBITMAP hBitmap = CreateCompatibleBitmap(HDCMem, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDC, hBitmap);
DrawIcon(hDC, 0, 0, hIcon);
SelectObject(hDC, hOldBitmap);
DeleteDC(hDC);
hb_retnl( ( LONG ) hBitmap );
}
then I thinked
ico := nImage
hBmp := BmpFromIcon( ico )
now How I can make to show hBmp into Image control ?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
- Antonio Linares
- Site Admin
- Posts: 42430
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 17 times
- Been thanked: 52 times
- Contact:
- Silvio.Falconi
- Posts: 7119
- Joined: Thu Oct 18, 2012 7:17 pm
Re: bmpfromico
it run BUT bad
look please ( I dropped a PPTX file )
Any solution ?
perhpas we can create the bitmap trasparent no black background ...perhaps...
look please ( I dropped a PPTX file )
Any solution ?
perhpas we can create the bitmap trasparent no black background ...perhaps...
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Re: bmpfromico
Silvio ,
BmpfromIco function is include en fwh .
BmpfromIco function is include en fwh .
Code: Select all | Expand
ico := nImage
hBmp := BmpFromIcon( ico )
DeleteObject( oImage:hBitmap )
oImage:hBitmap = hBmp
oImage:HasAlpha()
oImage:Refresh()
DestroyIcon( ico )
- Silvio.Falconi
- Posts: 7119
- Joined: Thu Oct 18, 2012 7:17 pm
Re: bmpfromico
thanks
can I make a big bmp ?
change this line ?
HBITMAP hBitmap = CreateCompatibleBitmap(HDCMem, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
Itried to make
HBITMAP hBitmap = CreateCompatibleBitmap(HDCMem, 128, 128);
the bitmap is large but the icon is small
can I make a big bmp ?
change this line ?
HBITMAP hBitmap = CreateCompatibleBitmap(HDCMem, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
Itried to make
HBITMAP hBitmap = CreateCompatibleBitmap(HDCMem, 128, 128);
the bitmap is large but the icon is small
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Re: bmpfromico
for resize bmp , i use gdiplus....
Function GDIBmpFromIco( cFileIcon , oImage )
local ogbmp := GdiBmp():new( cFileIcon)
ogbmp:resize( nWidth,nHeight)
DeleteObject( oImage:hBitmap )
oImage:hBitmap := oGBmp:GetGDIHbitmap()
oImage:HasAlpha()
oImage:Refresh()
ogbmp:end()
Return nil
Function GDIBmpFromIco( cFileIcon , oImage )
local ogbmp := GdiBmp():new( cFileIcon)
ogbmp:resize( nWidth,nHeight)
DeleteObject( oImage:hBitmap )
oImage:hBitmap := oGBmp:GetGDIHbitmap()
oImage:HasAlpha()
oImage:Refresh()
ogbmp:end()
Return nil
- Silvio.Falconi
- Posts: 7119
- Joined: Thu Oct 18, 2012 7:17 pm
Re: bmpfromico
Obj\urllink.c:
[1]:PORC.EXE C:\Work\Prg\Allegati\Resource\default.rc /I c:\work\pellesc\include /I win
[1]:iLink32.Exe -Gn -aa -Tpe -s @Allegati.bcl
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Error: Unresolved external '_HB_FUN_HB_NUMTOHEX' referenced from C:\WORK\FWH\LIB\FIVEHX.LIB|TGDIPLUS
[1]:PORC.EXE C:\Work\Prg\Allegati\Resource\default.rc /I c:\work\pellesc\include /I win
[1]:iLink32.Exe -Gn -aa -Tpe -s @Allegati.bcl
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Error: Unresolved external '_HB_FUN_HB_NUMTOHEX' referenced from C:\WORK\FWH\LIB\FIVEHX.LIB|TGDIPLUS
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Re: bmpfromico
silvio add this function to prg ...
Code: Select all | Expand
Function lIsPng( cStr )
local cIsPng := left( cStr, 8 )
local lPng
local i, nChar, cChar
local cHex:= ""
For i = 1 To 8
nChar = Asc( SubStr( cIsPng , i, 1 ) )
//cChar = hb_NumToHex( nChar ) // for harbour
cChar = NumToHex( nChar ) // for xHarbour
cChar:= If( Len( cChar ) == 1, "0", "" ) + cChar
cHex:= cHex + Upper( cChar )
Next
lPng := ( cHex == "89504E470D0A1A0A" )
Return lPng
- Silvio.Falconi
- Posts: 7119
- Joined: Thu Oct 18, 2012 7:17 pm
Re: bmpfromico
Manuel,
I modify the tgdiplus class
now it is compiled
but perhaps there is something not run also
cFile cab be for a sample : test.pptx
ico := ICON_EXEREAD(cfile)
GDIBmpFromIco( ico, oImagePreview )
give me a message fichero no encontrado
HB_FUNC( ICON_EXEREAD )
{
SHFILEINFO sfi;
ZeroMemory(&sfi, sizeof(SHFILEINFO));
SHGetFileInfo(hb_parc(1), 0, &sfi, sizeof(SHFILEINFO), SHGFI_ICON );
hb_retnl( ( LONG ) sfi.hIcon );
}
I modify the tgdiplus class
now it is compiled
but perhaps there is something not run also
cFile cab be for a sample : test.pptx
ico := ICON_EXEREAD(cfile)
GDIBmpFromIco( ico, oImagePreview )
give me a message fichero no encontrado
HB_FUNC( ICON_EXEREAD )
{
SHFILEINFO sfi;
ZeroMemory(&sfi, sizeof(SHFILEINFO));
SHGetFileInfo(hb_parc(1), 0, &sfi, sizeof(SHFILEINFO), SHGFI_ICON );
hb_retnl( ( LONG ) sfi.hIcon );
}
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Re: bmpfromico
ok Silvio , back to top
This code is ok for me :
This code is ok for me :
Code: Select all | Expand
Function Main ()
local ownd
local oimage
DEFINE WINDOW oWnd TITLE "Testing hicon to bmp " FROM 5,5 TO 400, 600 PIXEL ;
COLOR CLR_GRAY, CLR_GRAY
@ 20,2 button "crear" size 40,20 pixel Action imagenfromico( oimage )
@ 20 ,130 Button "salir" Action ownd:end() size 40,20 pixel
@ 3, 38 BITMAP oimage FILE "" size 148,148 of oWnd
ACTIVATE WINDOW oWnd
Return (nil)
Function imagenfromico( oImage )
local cFile:= cGetfile("coge","*.*")
local ico := ICON_EXEREAD( cFile )
BmpFromHIcon( ico, oImage , oImage:Super:nWidth(), oImage:Super:nHeight() )
DestroyIcon( ico )
Return nil
Function BmpFromHIcon( hIcon , oImage , nWidth, nHeight )
local hBmp := BmpFromIcon( hIcon )
DeleteObject( oImage:hBitmap )
oImage:hBitmap = resizebmp( hBmp, nWidth, nHeight )
DeleteObject( hBmp )
oImage:HasAlpha()
oImage:Refresh()
Return nil
- nageswaragunupudi
- Posts: 10714
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 8 times
- Contact:
Re: bmpfromico
Just for information.
We need not have a separate new function ICON_EXEREAD. There is already FWH function ICON_READ( <cfile> ) for the same purpose. The functions already in FWH are adequate for this purpose.
We need not have a separate new function ICON_EXEREAD. There is already FWH function ICON_READ( <cfile> ) for the same purpose. The functions already in FWH are adequate for this purpose.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- Silvio.Falconi
- Posts: 7119
- Joined: Thu Oct 18, 2012 7:17 pm
Re: bmpfromico
Mr Nages I found that function on this forum from Daniel Garcia Gill
Manuel ( Mastintin) I saw the best resolution is 64X64 because if I make the image with the size of Image control is too Big
Please see here :
version with Image file and contexmenu of file
Version with a pdf file dropped into
I wish send thanks to all my friends
thanks to Antonio Linares and AntoninoP for modifies to Listview class
thanks to AntoninoP for file contexmenu and other functions (I hope he found a solution to show the lPreviewHeader also on Bcc585)
thanks to Manuel Mastintn for support Tgdiplus class
thanks to Emg for the tech support
thanks to Paco for the c5Tstatusbar and TpanelEx classes
Manuel ( Mastintin) I saw the best resolution is 64X64 because if I make the image with the size of Image control is too Big
Please see here :
version with Image file and contexmenu of file
Version with a pdf file dropped into
I wish send thanks to all my friends
thanks to Antonio Linares and AntoninoP for modifies to Listview class
thanks to AntoninoP for file contexmenu and other functions (I hope he found a solution to show the lPreviewHeader also on Bcc585)
thanks to Manuel Mastintn for support Tgdiplus class
thanks to Emg for the tech support
thanks to Paco for the c5Tstatusbar and TpanelEx classes
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Re: bmpfromico
Silvio , Good news
New code for Icons ...
Change this function in gdiplus.cpp ...
Add this code ad end of gdiplius.cpp ... ( is c++ code )
ICON_EXEREAD function has 2 parameters name file , and Size ..
0->LARGE 32x32
1->SMALL 16x16
2->48x48
3-> These images are the size specified by GetSystemMetrics called with SM_CXSMICON and GetSystemMetrics called with SM_CYSMICON.
4-> Windows Vista and later. The image is normally 256x256 pixels.
And test ...
New code for Icons ...
Change this function in gdiplus.cpp ...
Code: Select all | Expand
HB_FUNC( GDIPLUSIMAGEFROMICO )
{
HICON hIcon = ( HICON ) hb_parnl( 1 ) ;
ICONINFO ii ;
GetIconInfo(hIcon, &ii);
BITMAP bmp;
GetObject(ii.hbmColor, sizeof(bmp), &bmp);
Bitmap * temp = new Bitmap(ii.hbmColor, NULL);
BitmapData bmpData;
int nWidth = temp->GetWidth() ;
int nHeight = temp->GetHeight() ;
Rect rect(0, 0, nWidth, nHeight);
temp->LockBits(&rect, ImageLockModeRead, temp->GetPixelFormat(), &bmpData );
byte* imgPtr = (byte*)(bmpData.Scan0) ;
int bheight = bmpData.Height;
int bwidth = bmpData.Width;
int bstride = bmpData.Stride;
Bitmap *original = new Bitmap( bwidth, bheight, bstride, PixelFormat32bppARGB, imgPtr );
temp->UnlockBits( &bmpData ) ;
Bitmap* newImage = new Bitmap( nWidth, nHeight, PixelFormat32bppARGB ) ; // original->GetPixelFormat() );
Graphics * graphics = new Graphics( newImage );
graphics->DrawImage( original ,0, 0, nWidth, nHeight);
delete temp ;
delete original ;
hb_retnl( ( HB_LONG ) newImage ) ;
}
Add this code ad end of gdiplius.cpp ... ( is c++ code )
ICON_EXEREAD function has 2 parameters name file , and Size ..
0->LARGE 32x32
1->SMALL 16x16
2->48x48
3-> These images are the size specified by GetSystemMetrics called with SM_CXSMICON and GetSystemMetrics called with SM_CYSMICON.
4-> Windows Vista and later. The image is normally 256x256 pixels.
Code: Select all | Expand
#include <commctrl.h>
#include <commoncontrols.h>
HB_FUNC( ICON_EXEREAD )
{
HICON hico ;
SHFILEINFO sfi = { 0 };
LPCTSTR pName = ( LPCTSTR ) hb_parc( 1 ) ;
SHGetFileInfo( pName , -1, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX );
HIMAGELIST* imageList;
HRESULT hResult = SHGetImageList( hb_parni( 2 ) , IID_IImageList2, (void**)&imageList );
if(hResult == S_OK) {
((IImageList*)imageList)->GetIcon(sfi.iIcon,ILD_NORMAL|ILD_TRANSPARENT , &hico);
}
#ifndef _WIN64
hb_retnl( ( LONG ) hico );
#else
hb_retnll( ( LONGLONG ) hico );
#endif
}
And test ...
Code: Select all | Expand
#include "FiveWin.ch"
Function Main ()
local ownd
local oimage
DEFINE WINDOW oWnd TITLE "Testing GDI+ Class" FROM 5,5 TO 400, 600 PIXEL
@ 20,2 button "crear" size 40,20 pixel Action imagenfromico(oimage )
@ 20 ,130 Button "salir" Action ownd:end() size 40,20 pixel
@ 3, 38 BITMAP oimage FILE "" size 220,220 of oWnd
ACTIVATE WINDOW oWnd
Return (nil)
Function imagenfromico(oImage )
local cFile:= cGetfile("coge","*.*")
local ico := ICON_EXEREAD( cFile, 4 ) // for ico, dll and exe files
GDIBmpFromHIcon( ico, oImage , oImage:Super:nWidth(), oImage:Super:nHeight() )
Return nil
Function GDIBmpFromHIcon( hIcon , oImage , nWidth, nHeight )
local ogbmp := GdiBmp():new()
ogbmp:hBmp:= GDIPLUSIMAGEFROMICO( hicon )
ogbmp:resize( nWidth,nHeight)
DeleteObject( oImage:hBitmap )
oImage:hBitmap := oGBmp:GetGDIHbitmap()
oImage:HasAlpha()
oImage:Refresh()
ogbmp:end()
Return nil