Function to detect and resize image file
Moderator: Rathinagiri
Function to detect and resize image file
Dear Masters,
1. Any HMG Functions to detect the imagefile ( jpg, bmp, etc) for Pixel Dimensions ?
2. Any HMG Functions to resize the above dimension and save the new dimension to imagefile ?
When we are using image control to display from imagefile, sometime the image cannot be properly
displayed due to the portrait/landscape orientation. Secondly nowaday picture taken by digital camera
resolution is to big and if only we can resize it to our need, not only save space by speedup the program too.
TIA
Best Regards
Chang
1. Any HMG Functions to detect the imagefile ( jpg, bmp, etc) for Pixel Dimensions ?
2. Any HMG Functions to resize the above dimension and save the new dimension to imagefile ?
When we are using image control to display from imagefile, sometime the image cannot be properly
displayed due to the portrait/landscape orientation. Secondly nowaday picture taken by digital camera
resolution is to big and if only we can resize it to our need, not only save space by speedup the program too.
TIA
Best Regards
Chang
Just Hmg It !
Re: Function to detect and resize image file
I'm using such a code for detecting size of image:
Code: Select all
aSizeOfPicture := HB_GETIMAGESIZE( cImageFileName)
Code: Select all
*--------------------------
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
#include "hbapifs.h"
/*
Author: Andi Jahja <harbour@cbn.net.id>
*/
BOOL GetImageSize( const char *fn, int *x, int *y )
{
unsigned char buf[24];
long len;
FILE *f = hb_fopen( fn, "rb" );
if (!f)
return FALSE;
fseek( f, 0, SEEK_END );
len = ftell( f );
fseek( f, 0, SEEK_SET );
if ( len<24 )
{
fclose( f );
return FALSE;
}
// Strategy:
// reading GIF dimensions requires the first 10 bytes of the file
// reading PNG dimensions requires the first 24 bytes of the file
// reading JPEG dimensions requires scanning through jpeg chunks
// In all formats, the file is at least 24 bytes big, so we'll read
//that always
fread( buf, 1, 24, f );
// For JPEGs, we need to read the first 12 bytes of each chunk.
// We'll read those 12 bytes at buf+2...buf+14, i.e. overwriting
// the existing buf.
if (buf[0]==0xFF && buf[1]==0xD8 && buf[2]==0xFF && buf[3]==0xE0 &&
buf[6]=='J' && buf[7]=='F' && buf[8]=='I' && buf[9]=='F')
{
long pos = 2;
while ( buf[2]==0xFF )
{
if (buf[3]==0xC0 || buf[3]==0xC1 || buf[3]==0xC2 ||
buf[3]==0xC3 || buf[3]==0xC9 || buf[3]==0xCA ||
buf[3]==0xCB)
break;
pos += 2+(buf[4]<<8)+buf[5];
if ( pos+12>len )
break;
fseek( f, pos, SEEK_SET );
fread( buf+2, 1, 12, f);
}
}
fclose(f);
// JPEG: (first two bytes of buf are first two bytes of the jpeg
// file; rest of buf is the DCT frame
if (buf[0]==0xFF && buf[1]==0xD8 && buf[2]==0xFF)
{
*y = (buf[7]<<8) + buf[8];
*x = (buf[9]<<8) + buf[10];
return TRUE;
}
// GIF: first three bytes say "GIF", next three give version
// number. Then dimensions
if (buf[0]=='G' && buf[1]=='I' && buf[2]=='F')
{
*x = buf[6] + (buf[7]<<8);
*y = buf[8] + (buf[9]<<8);
return TRUE;
}
// PNG: the first frame is by definition an IHDR frame, which gives
// dimensions
if ( buf[0]==0x89 && buf[1]=='P' && buf[2]=='N' && buf[3]=='G' &&
buf[4]==0x0D && buf[5]==0x0A && buf[6]==0x1A && buf[7]==0x0A
&& buf[12]=='I' && buf[13]=='H' && buf[14]=='D' &&
buf[15]=='R')
{
*x = (buf[16]<<24) + (buf[17]<<16) + (buf[18]<<8)+(buf[19]<<0);
*y = (buf[20]<<24) + (buf[21]<<16) + (buf[22]<<8)+(buf[23]<<0);
return TRUE;
}
return FALSE;
}
HB_FUNC( HB_GETIMAGESIZE )
/*
Syntax: HB_GETIMAGESIZE( cPicFile )
Parameter: cPicFile = graphic file (JPG, GIF, PNG)
Return: 2 dim array -> array[1] = width, array[2] == height
*/
{
int x = 0, y = 0;
GetImageSize( hb_parcx( 1 ), &x, &y );
hb_reta( 2 );
hb_storvni( x, -1, 1 );
hb_storvni( y, -1, 2 );
}
#pragma ENDDUMP
- esgici
- Posts: 4543
- Joined: Wed Jul 30, 2008 9:17 pm
- DBs Used: DBF
- Location: iskenderun / Turkiye
- Contact:
Re: Function to detect and resize image file
Hi
My way is a bit different ( use high level whenever possible ):
~hmg~\hfcl\Samples\BosTaurus\demo06.prg
Happy HMG'ing
My way is a bit different ( use high level whenever possible ):
Sample :HMG Doc wrote:BT_BitmapWidth (hBitmap)
Return the width of the specified bitmap in pixels.
hBitmap: is a handle to bitmap.
BT_BitmapHeight (hBitmap)
Return the height of the specified bitmap in pixels.
hBitmap: is a handle to bitmap.
~hmg~\hfcl\Samples\BosTaurus\demo06.prg
Happy HMG'ing
Viva INTERNATIONAL HMG
- srvet_claudio
- Posts: 2193
- Joined: Thu Feb 25, 2010 8:43 pm
- Location: Uruguay
- Contact:
Re: Function to detect and resize image file
Other way:esgici wrote:Hi
My way is a bit different ( use high level whenever possible ):
Sample :HMG Doc wrote:BT_BitmapWidth (hBitmap)
Return the width of the specified bitmap in pixels.
hBitmap: is a handle to bitmap.
BT_BitmapHeight (hBitmap)
Return the height of the specified bitmap in pixels.
hBitmap: is a handle to bitmap.
~hmg~\hfcl\Samples\BosTaurus\demo06.prg
Happy HMG'ing
Code: Select all
HMG_GetImageInfo ( [ cFileName | hBitmap ], @nWidth, @nHeight, @aBackColor, [ nRowColor ], [ nColColor ] ) --> return lBoolean
- esgici
- Posts: 4543
- Joined: Wed Jul 30, 2008 9:17 pm
- DBs Used: DBF
- Location: iskenderun / Turkiye
- Contact:
Re: Function to detect and resize image file
Oh, yeah !srvet_claudio wrote:...
Other way:Code: Select all
HMG_GetImageInfo ( [ cFileName | hBitmap ], @nWidth, @nHeight, @aBackColor, [ nRowColor ], [ nColColor ] ) --> return lBoolean
New Function ( Introduced in 3.2 )
I missed it
Added later :
My two cents, a little sample for HMG_GetImageInfo() function :
Viva INTERNATIONAL HMG
Re: Function to detect and resize image file
Wonderful....
and thanks very much Masters.
Now images can be display properly in the control....
but... any suggestion on how to resize the imagefile ?
and thanks very much Masters.
Now images can be display properly in the control....
but... any suggestion on how to resize the imagefile ?
Just Hmg It !
- srvet_claudio
- Posts: 2193
- Joined: Thu Feb 25, 2010 8:43 pm
- Location: Uruguay
- Contact:
Re: Function to detect and resize image file
See:hmgchang wrote:any suggestion on how to resize the imagefile ?
BT_BitmapCopyAndResize (hBitmap, New_Width, New_Height, Mode_Stretch, Algorithm)
Code: Select all
Copy and resizes the specified bitmap and returns a handle to the bitmap with the new size.
hBitmap: is a handle to the origin bitmap.
New_Width, New_Height: is the new size of the bitmap image.
Mode_Stretch: sets the mode as the bitmap of origin is adjusts (is stretches or compresses) in the new size bitmap, it is one of the constants: BT_SCALE or BT_STRETCH (defined in BosTaurus.CH). For default Mode_Stretch = BT_STRETCH.
Algorithm: sets the mode as the bitmap is resized, it is one of the constants:BT_RESIZE_COLORONCOLOR, BT_RESIZE_HALFTONE or BT_RESIZE_BILINEAR (defined in BosTaurus.CH). For default Algorithm = BT_RESIZE_HALFTONE.
Re: Function to detect and resize image file
I read about :
Photo Resizer by HMG+FreeImage.dll by G. Filatov ( one of HMG Forum Topic, but
i dont know how to make the link from here.)
but i need help on how to use Mr. Filatov's DLL for taking an imagefile then
resize and saveback to an imagefile.
Best Regards,
Chang
Photo Resizer by HMG+FreeImage.dll by G. Filatov ( one of HMG Forum Topic, but
i dont know how to make the link from here.)
but i need help on how to use Mr. Filatov's DLL for taking an imagefile then
resize and saveback to an imagefile.
Best Regards,
Chang
Just Hmg It !