README.TXT
上传用户:dgcrss
上传日期:2007-01-03
资源大小:390k
文件大小:10k
源码类别:

图片显示

开发平台:

Visual C++

  1. CHRISDL@PAGESZ.NET                                         9/18/97
  2. Note : GIF support has been removed as of 9/24/97. I am 
  3. pursuing a license from Unisys to enable me to include GIF support 
  4.     in this package. Until then, no GIF. Sorry. -cdl
  5.  
  6. My JpegLib2 library and JpegFile class
  7. I've been looking for a long time for a JPEG package that will allow me 
  8. to do this : 
  9. BYTE * RGBbuffer = ReadJPEGFile(filename,&width,&height);
  10. and this:
  11. SaveJPG(RGBbuf, width, height...);
  12. I never found one that didn't cost many hundreds of dollars, so I wrote 
  13. my own. 
  14. What is it?
  15. My class is called JpegFile.cpp. It is based on a Win32 compilation of 
  16. the IJG V.6a JPEG source. It does two main things : 
  17.      it reads a JPEG file into an RGB buffer, 
  18.      it saves an RGB buffer as an RGB or grayscale JPEG file. 
  19. There are some utility routines in it to do things like 
  20.      RGB -> BGR
  21.      vertical flip
  22.      DWORD-align
  23.      un DWORD-align
  24.      convert to grayscale
  25.      Color quantize a 24-bit image to an 8-bit image
  26. It can also read 
  27.      1, 4, 8 and 24 bit BMP files
  28. It can also write
  29.      1, 4, 8 and 24-bit BMP files
  30. There are no provisions for progressive reading, progress bars, partial 
  31. reads/saves, extended error handling, etc.. I use a very small portion 
  32. of what the IJG code is capable of doing. I tried to keep the IJG 
  33. source as intact as possible, to ease debugging - I assume the IJG code 
  34. works.perfectly and that anything going wrong is my fault. You should 
  35. assume this is true, also.
  36. This code has worked in every application I've tried it in. This has 
  37. only run (to my knowledge) on Win 95, VC++ 4.x and VC++5.0 . I have 
  38. heard, however, that one person successfully modified it to work on a 
  39. Borland compiler to create a DLL for use in Visual BASIC - I don't have 
  40. his code.
  41. Color quantization code is based on Dennis Lee's DL1Quant.
  42. If you don't like MFC, or would prefer to have your JPG and BMP code all
  43. wrapped up in a DLL, with dozens of handy image processing utilities (
  44. resize, zoom, rotate, matrix, LUT, crop, draw, etc.) then check out my
  45. ImgDLL package. http://www.pagesz.net/software/imgdll.htm
  46.                                     Non-MFC support
  47. I do offer a Win32 DLL that does everything this package does, for 
  48. those of you who don't have access to VC++ or would rather not mess 
  49. with VC++ (all you Borland or Visual BASIC types, for instance). Check 
  50. out my ImgDLL page for more info.
  51.                                       Terms of use
  52. 1: I've decided to make this class, as well as my compilation of the 
  53. IJG library available to the public. This is entirely free - no 
  54. royalties, no time bombs, no annoyance screens. All I ask is that you 
  55. mention me in your software, especially if it's commercial software - 
  56. and, if possible, add a link to my page . I just want some 
  57. acknowledgment... :)
  58. 2: Because it is free, however, there are no guarantees - use at your 
  59. own risk! If you want software that comes with someone you can point 
  60. your finger at if it fails, spend the money on a commercial package 
  61. from a company with a legal department. I'm just sharing.
  62. 3: The main reason for this package is to provide simple C++ JPG 
  63. support. The BMP functions are in there only so that I won't 
  64. have to answer the question "I got your JPG stuff, do you do BMP ?"
  65. 4: Come to me first for help with this code.
  66.                                      Troubleshooting
  67. This package is not the responsibility of the people who's code I have 
  68. used here - the IJG people, for example. Let me rephrase that. Come to 
  69. me first with any problems you are having with this package.
  70. If you run into any problems with this software, please feel free to 
  71. contact me. If it turns out that the problem is in my code, I will fix 
  72. it. Please do not ask the IJG people, or any of the other people who's 
  73. code I have included here for help unless we've first determined that 
  74. the problem is not in my code.
  75. If you feel the problem is with the IJG code that I have included, I 
  76. recommend you get a full copy of the official IJG source. The full IJG 
  77. source comes with excellent documentation and should be able to help 
  78. you. You can get the IJG code at the simtel archives.
  79. MSVC 5.0 Dialog App Problem + BOOL redefinition problem
  80. Problem : There is some serious type conflict associated with the IJG 
  81. code's use of the name "boolean" and MSVC 5.0's use of the name 
  82. "boolean". In MSVC 5.0, "boolean" is a different size than it is in the 
  83. IJG code (one is a char and one is an int). You typically run into this 
  84. if you start using OLE stuff, which Dialog Apps come with by default. 
  85. You will see lots of "struct mismatch" errors and your code won't run. 
  86. It doesn't seem to happen in MSVC 4.x dialog apps. This is new.
  87. Fix method #1 - Specific to MSVC 5.0 Dialog Apps
  88.      1. Compile the Jpeglib2.lib as-is.
  89.      2. In your app, stdafx.h, remove the line:
  90.      #include <afxdisp.h> // MFC OLE automation classes
  91.      3. In your main app class InitInstance() remove the line :
  92.      AfxEnableControlContainer();
  93.      4. In jpegfile.cpp, be sure not to : 
  94.      #define HAVE_BOOLEAN
  95. This might break a whole bunch of OLE things. But, if you're not using 
  96. OLE, I think this is safe.
  97. Fix method #2 - General fix.
  98.      1. In the Jpeglib2.lib files, change jmorecfg.h :
  99.      from (line 228):
  100.      #ifndef HAVE_BOOLEAN
  101.      typedef int boolean;
  102.      #endif 
  103.      to:
  104.      #ifndef HAVE_BOOLEAN
  105.      typedef char boolean;
  106.      #endif 
  107.      2. Compile Jpeglib2.lib as usual - ignore the warnings...
  108.      3. In your app, in jpegfile.cpp, add
  109.      #define HAVE_BOOLEAN 
  110.      before
  111.      #include "jpeglib.h" 
  112. This method allows you to use OLE. But makes a change in the IJG code. 
  113. This is something I've tried to avoid doing. All of my tests have 
  114. worked, though I'm unsure of what effect this change could have.
  115. I include a file dlgvc5.zip, which contains a tiny sample MSVC 5.0 
  116. dialog app example. It simply loads and displays JPEG files. I used the 
  117. steps outlined in method #1 above in creating it.
  118. Thanks to Bryce Burrows, Brian Krisler and Alexandre Maltais for taking 
  119. the time to point out the problem to me.
  120.                                       The Package
  121.     JPEGLIB2
  122. This is the VC++ 4.x project (JPEGLIB2.MDP) for my compilation of the 
  123. IJG source for Win95. Most of the IJG source is included here - 
  124. everything but the example programs and the documentation. This is what 
  125. does the actual work. It is absolutely necessary that this library is 
  126. compiled and linked to the application using the JpegFile class. 
  127. Fortunately, it should be a matter of unZipping the project into it own 
  128. directory and aiming VC++ 4.x at it. 
  129. It is possible to use this library (or the source for the library) on 
  130. its own, if you know the IJG codebase. I really don't. I know that it 
  131. works for my JpegFile class, though.
  132. I have changed only two lines of the original source. I commented out 
  133. the exit(..) in jerror.c and replaced the fprintf(stderr,..) with a 
  134. MessageBox(...). That's right, it launches a message box on warnings. 
  135. It's certainly possible to remove this line if you absolutely can not 
  136. have message boxes popping up. It is also possible for you to write 
  137. your own error handler.
  138. The biggest benefit of using my JPEG package is that I've managed to 
  139. get the IJG codebase into a VC++ 4.x (Win32) project. The other part of 
  140. my package is really a thin wrapper.
  141.     MFCAPP
  142. This is a small MFC C++ sample application using a class called 
  143. JpegFile. JpegFile is a wrapper around the JPEGLIB2 library. If you 
  144. know what you're doing, you can certainly ignore my class. If you want 
  145. simple functionality for reading and writing JPEG files, JpegFile does 
  146. it very well. If nothing else, this class is a great starting place                      
  147. for those who wish to figure out more of the IJG codebase. I use it for 
  148. all of my JPEG needs. 
  149. The application provides the following functions in C++ :
  150. Read a BMP (1, 4, 8 or 24-bit) or JPG file, display the result.
  151. Save a BMP (1, 4, 8 or 24 bit)  or JPG (RGB or grayscale) file.
  152. Examine the dimensions of a JPG file.
  153. It should be very simple to compile and run this app, as well. If you 
  154. want to use the JpegFile class in another app, you need to :
  155. Add JpegFile.cpp to your project.
  156. #include "JpegFile.h" 
  157. Link with JPEGLIB2.LIB you built as descibed above.
  158. Tell the linker using Build/Settings/Link/Input to ignore the LIBC 
  159. and/or LIBCD files. There are some conflicts with this library. I've 
  160. never been able to figure out what they are. But, I've never found 
  161. ignoring these libraries to be a problem. If someone knows what's up 
  162. here, tell me.
  163. Using Tools/Options/Directories/Include Files, add a path entry to the 
  164. location of the JPEGLIB2 source files. There are many .H files here 
  165. that need to be included by way of JpegFile.cpp.
  166. The BMP code is fairly simple to extract to different apps. I do it all 
  167. the time. 
  168.     DLGVC5
  169. This is a small sample MSVC 5.0 dialog app. It shows how to fix the 
  170. struct size mismatch (boolean size) problem. 
  171. Disclaimer Disclaimer Disclaimer Disclaimer Disclaimer 
  172. I make no guarantees about this code's suitablilty for use. I find it very useful for my applications, but 
  173. cannot anticipate all places this code could wind up. If you have problems with this software, you should 
  174. ask me about it.If there is a problem with anything I wrote, I will certainly try to help solve it. If it is a 
  175. problem with the IJG code, I will try my best. 
  176. Since I have left the IJG source essentially intact (but for two lines in jerror.c) you should be able to find all 
  177. the answers you need in the full IJG distribution, which can be found at the simtel archives You are 
  178. strongly encouraged to look in the original IJG source for any questions you might have. There is excellent 
  179. documentation included in the IJG package, which will probably answer all of  your JPG questions. 
  180. CHRISDL@PAGESZ.NET