Hi there,
tried to use the Intel JPEG Library with pbdll over the holidays.
Code below is a PORT FROM VB TO pbdll.
You'll find the VB code at [link]http://vbaccelerator.com/[/link]
The JPEG Lib is at [link]www.intel.com[/link]
It works with some bitmaps but most bitmaps produce a error
%IJL_UNSUPPORTED_SUBSAMPLING OR %IJL_INVALID_JPEG_PROPERTIES in
the function savejpg at line - ijlWrite(VARPTR(tJ), %IJL_JFILE_WRITEWHOLEIMAGE)
I guess the fault is a improper JPEG_CORE_PROPERTIES_VB type declare.
Which value shall i use for enum types ? Long or integer ?
Does anyone use the Intel JPEG Library with PBDLL ?
Best rgds
Ralph
tried to use the Intel JPEG Library with pbdll over the holidays.
Code below is a PORT FROM VB TO pbdll.
You'll find the VB code at [link]http://vbaccelerator.com/[/link]
The JPEG Lib is at [link]www.intel.com[/link]
It works with some bitmaps but most bitmaps produce a error
%IJL_UNSUPPORTED_SUBSAMPLING OR %IJL_INVALID_JPEG_PROPERTIES in
the function savejpg at line - ijlWrite(VARPTR(tJ), %IJL_JFILE_WRITEWHOLEIMAGE)
I guess the fault is a improper JPEG_CORE_PROPERTIES_VB type declare.
Which value shall i use for enum types ? Long or integer ?
Does anyone use the Intel JPEG Library with PBDLL ?
Best rgds
Ralph
Code:
#COMPILE EXE #INCLUDE "win32api.inc" ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' constants and prototype for ijl10.dll 'Private Enum IJLERR ' The following "error" values indicate an "OK" condition. %IJL_OK = 0 %IJL_INTERRUPT_OK = 1 %IJL_ROI_OK = 2 %IJL_EXCEPTION_DETECTED = -1 %IJL_INVALID_ENCODER = -2 %IJL_UNSUPPORTED_SUBSAMPLING = -3 %IJL_UNSUPPORTED_BYTES_PER_PIXEL = -4 %IJL_MEMORY_ERROR = -5 %IJL_BAD_HUFFMAN_TABLE = -6 %IJL_BAD_QUANT_TABLE = -7 %IJL_INVALID_JPEG_PROPERTIES = -8 %IJL_ERR_FILECLOSE = -9 %IJL_INVALID_FILENAME = -10 %IJL_ERROR_EOF = -11 %IJL_PROG_NOT_SUPPORTED = -12 %IJL_ERR_NOT_JPEG = -13 %IJL_ERR_COMP = -14 %IJL_ERR_SOF = -15 %IJL_ERR_DNL = -16 %IJL_ERR_NO_HUF = -17 %IJL_ERR_NO_QUAN = -18 %IJL_ERR_NO_FRAME = -19 %IJL_ERR_MULT_FRAME = -20 %IJL_ERR_DATA = -21 %IJL_ERR_NO_IMAGE = -22 %IJL_FILE_ERROR = -23 %IJL_INTERNAL_ERROR = -24 %IJL_BAD_RST_MARKER = -25 %IJL_THUMBNAIL_DIB_TOO_SMALL = -26 %IJL_THUMBNAIL_DIB_WRONG_COLOR = -27 %IJL_RESERVED = -99 'END Enum 'Private Enum IJLIOTYPE %IJL_SETUP = -1& ''// Read JPEG parameters (i.e., height, width, channels, '' sampling, etc.) from a JPEG bit stream. %IJL_JFILE_READPARAMS = 0& %IJL_JBUFF_READPARAMS = 1& '' Read a JPEG Interchange Format image. %IJL_JFILE_READWHOLEIMAGE = 2& %IJL_JBUFF_READWHOLEIMAGE = 3& '' Read JPEG tables from a JPEG Abbreviated Format bit stream. %IJL_JFILE_READHEADER = 4& %IJL_JBUFF_READHEADER = 5& '' Read image info from a JPEG Abbreviated Format bit stream. %IJL_JFILE_READENTROPY = 6& %IJL_JBUFF_READENTROPY = 7& '' Write an entire JFIF bit stream. %IJL_JFILE_WRITEWHOLEIMAGE = 8& %IJL_JBUFF_WRITEWHOLEIMAGE = 9& '' Write a JPEG Abbreviated Format bit stream. %IJL_JFILE_WRITEHEADER = 10& %IJL_JBUFF_WRITEHEADER = 11& '' Write image info to a JPEG Abbreviated Format bit stream. %IJL_JFILE_WRITEENTROPY = 12& %IJL_JBUFF_WRITEENTROPY = 13& '' Scaled Decoding Options: '' Reads a JPEG image scaled to 1/2 size. %IJL_JFILE_READONEHALF = 14& %IJL_JBUFF_READONEHALF = 15& '' Reads a JPEG image scaled to 1/4 size. %IJL_JFILE_READONEQUARTER = 16& %IJL_JBUFF_READONEQUARTER = 17& '' Reads a JPEG image scaled to 1/8 size. %IJL_JFILE_READONEEIGHTH = 18& %IJL_JBUFF_READONEEIGHTH = 19& '' Reads an embedded thumbnail from a JFIF bit stream. %IJL_JFILE_READTHUMBNAIL = 20& %IJL_JBUFF_READTHUMBNAIL = 21& 'END Enum ' %IJL_BGR = 24 %IJL_NONE = 28 %IJL_RGB = 1 '' Red-Green-Blue COLOR space. %IJL_BGR = 2 '' Reversed channel ordering FROM IJL_RGB. %IJL_YCBCR = 3 '' Luminance-Chrominance COLOR space AS defined '' by CCIR Recommendation 601. %IJL_G = 4 '' Grayscale COLOR space. %IJL_RGBA_FPX = 5 '' FlashPix RGB 4 channel COLOR space that '' has pre-multiplied opacity. %IJL_YCBCRA_FPX = 6 '' FlashPix YCbCr 4 channel COLOR space that '' has pre-multiplied opacity. %IJL_411 = 1 '' Valid ON a JPEG w/ 3 channels. %IJL_422 = 2 '' Valid ON a JPEG w/ 3 channels. %IJL_4114 = 3 '' Valid ON a JPEG w/ 4 channels. %IJL_4224 = 4 '' Valid ON a JPEG w/ 4 channels. TYPE JPEG_CORE_PROPERTIES_VB UseJPEGPROPERTIES AS DWORD ' default = 0 ' DIB specific I/O data specifiers. DIBBytes AS LONG ' default = NULL 4 DIBWidth AS DWORD ' default = 0 8 DIBHeight AS INTEGER ' default = 0 12 DIBPadBytes AS DWORD ' default = 0 16 DIBChannels AS DWORD ' default = 3 20 DIBColor AS LONG ' default = IJL_BGR 24 enum DIBSubsampling AS LONG ' default = IJL_NONE 28 enum ' JPEG specific I/O data specifiers. JPGFile AS LONG ' JPGFile; 32 '// default = NULL JPGBytes AS LONG ' default = NULL 36 JPGSizeBytes AS DWORD ' default = 0 40 JPGWidth AS DWORD ' default = 0 44 JPGHeight AS DWORD ' default = 0 48 JPGChannels AS DWORD ' default = 3 JPGColor AS LONG ' default = IJL_YCBCR enum JPGSubsampling AS LONG ' default = IJL_411 enum JPGThumbWidth AS DWORD ' default = 0 JPGThumbHeight AS DWORD ' default = 0 ' JPEG conversion properties. cconversion_reqd AS DWORD ' default = TRUE upsampling_reqd AS DWORD ' default = TRUE jquality AS DWORD ' default = 75. 100 is my preferred quality setting. Pad AS DWORD ' 8-byte alignment!!! jprops (0 TO 19999) AS BYTE END TYPE DECLARE FUNCTION ijlInit LIB "ijl10.dll" ALIAS "ijlInit" (BYVAL jcprops AS LONG) AS INTEGER DECLARE FUNCTION ijlFree LIB "ijl10.dll" ALIAS "ijlFree" (BYVAL jcprops AS LONG) AS INTEGER DECLARE FUNCTION ijlRead LIB "ijl10.dll" ALIAS "ijlRead" (BYVAL jcprops AS LONG, BYVAL ioType AS INTEGER) AS INTEGER DECLARE FUNCTION ijlWrite LIB "ijl10.dll" ALIAS"ijlWrite" (BYVAL jcprops AS LONG , BYVAL ioType AS LONG) AS LONG DECLARE FUNCTION ijlGetLibVersion LIB "ijl10.dll" ALIAS "ijlGetLibVersion" () AS LONG DECLARE FUNCTION ijlGetErrorString LIB "ijl10.dll" ALIAS "ijlGetErrorString" (BYVAL code AS LONG) AS LONG FUNCTION SaveJPG( infile AS ASCIIZ, sFile AS ASCIIZ, BYVAL lQuality AS LONG ) AS INTEGER LOCAL tJ AS JPEG_CORE_PROPERTIES_VB LOCAL hBmp AS LONG LOCAL lPtr AS LONG LOCAL lR AS LONG LOCAL fh AS LONG LOCAL bmi AS BITMAPINFO LOCAL bm AS bitmap LOCAL hdc AS LONG LOCAL hdcmem AS LONG LOCAL pixelbuf AS STRING LOCAL hDesktop AS LONG LOCAL bmSize AS LONG hBmp = LoadImage(BYVAL %NULL, infile, %IMAGE_BITMAP, 0 , 0, %LR_LOADFROMFILE ) IF hBmp = 0 THEN MSGBOX "cannot read bmp" FUNCTION = %false EXIT FUNCTION END IF hDesktop = GetDesktopWindow() hdc = GetDC( hDesktop ) hdcmem = CreateCompatibleDC(hdc) ReleaseDC hDesktop, hdc GetObject hBmp, SIZEOF(bm), bm bmi.bmiHeader.biSize = LEN(bmi.bmiHeader) bmi.bmiHeader.biWidth = bm.bmWidth bmi.bmiHeader.biHeight = bm.bmHeight bmi.bmiHeader.biPlanes = 1 bmi.bmiHeader.biBitCount = bm.bmBitsPixel bmi.bmiHeader.biCompression = %BI_RGB '- Calculate space needed for the dib bits bmSize = bmI.bmiHeader.biWidth bmSize = (bmSize + 1) * (bmI.bmiHeader.biBitCount / 8) bmSize = ((bmSize + 3) / 4) * 4 bmSize = bmSize * bmI.bmiHeader.biHeight '- Allocate the memory ON ERROR RESUME NEXT pixelbuf = STRING$(bmSize, CHR$(0)) ON ERROR GOTO 0 IF ERR THEN MSGBOX "Couldn't get the memory" FUNCTION = %FALSE deleteObject hBmp deletedc hdcmem EXIT FUNCTION END IF lptr = STRPTR(pixelbuf) GetDIBits hdcmem, hBmp, 0, bmI.bmiHeader.biHeight, BYVAL lptr, bmI, %DIB_RGB_COLORS ' see what we've got ' FH = FREEFILE ' OPEN "bin.img" FOR OUTPUT AS fh ' PRINT #fh, pixelbuf; ' CLOSE fh lR = ijlInit( VARPTR(tJ) ) IF lR <> %IJL_OK THEN MSGBOX "Failed to init IJL" FUNCTION = %false deleteObject hBmp deletedc hdcmem EXIT FUNCTION END IF ' Set up the DIB information: tJ.DIBWidth = bm.bmWidth tJ.DIBHeight = bm.bmHeight tJ.DIBBytes = lptr '' hBmp '' cDib.DIBSectionBitsPtr ''' error with = -8 w/o line = -3 on most bmp's tJ.DIBPadBytes = bmi.bmiHeader.biSizeImage - bm.bmWidth * 3 ' Set up the JPEG information: tJ.JPGFile = VARPTR(sFile) tJ.JPGWidth = bm.bmWidth tJ.JPGHeight = bm.bmHeight tJ.jquality = 75 '' lQuality ' Write the image: lR = ijlWrite(VARPTR(tJ), %IJL_JFILE_WRITEWHOLEIMAGE) IF lR = %IJL_OK THEN FUNCTION = %True ELSE MSGBOX "Failed to save to JPG " + STR$(lr) END IF deleteObject hBmp deletedc hdcmem ' Ensure we have freed memory: ijlFree VARPTR(tJ) END FUNCTION FUNCTION PBMAIN() SaveJPG "splash.bmp", "splash.jpg", 100 END FUNCTION
Comment