BMP图片转JPEG图片C程序源代码_第1页
BMP图片转JPEG图片C程序源代码_第2页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/ A BMP truecolor to JPEG encoder/ Copyright 1999 Cristian Cuturicu#include #include #include #includeHjtypes.hM#include *jglobals.hM#include jtables.h*void vrite_APPOinfo()/Nothing to overwrite for APPOinfovvriteword(APPOinfo.marker);writeword(APPOinfo.length);writebytefJ1);wrilebyte(F);writebyte(*

2、r);writebyte(F);writebyte(O);writebyte(APPOinfo.versionhi);writebyte(APPOinfo.versionlo);writebyte(APPOinfo.xyunits);writeword(APPOinfo.xdensity);writeword(APPOinfo.ydensity);vvritebyte(APPOinfo.thuinbnwidth); writebyte(APPOinfo.thumbnheight);void write_SOFOinfo()/ We should overwrite width and heig

3、htwriteword(SOFOinfo.marker);writeword(SOFOinfo.length);writebyte(SOFOinfo.precision);writeword(SOFOinfo.height);writeword(SOFOinfo.widlh);writebyte(SOFOinfo.nrofcoinponents);vvritebyte(SOFOinfo.IdY);vvritebyte(SOFOinfo.HVY);vvritebyte(SOFOinfo.QTY);writebyte(SOFOinfo.IdCb);writebyte(SOFOinfo.HVCb);

4、writebyte(SOFOinfo.QTCb);writebyte(SOFOinfo.IdCr);writebyte(SOFOinfo.HVCr);writebyte(SOFOinfo.QTCr);void write_DQTinfo() BYTE i;vvriteword(DQTinfo.marker); vvriteword(DQTinfo.length);vvritebyte(DQTinfo.QTYinfo); for (i=0; i64; i+) writebyte(DQTinfo.Ytablei);vvritebyte(DQTinfo.QTCbinfo); for (i=0; i6

5、4; i+)vvritebyte(DQTinfo.CbtableiJ);void set_quant_table(BYTE *basic_table, BYTE scale_factor, BYTE *nevvtable) / Setquantization table and zigzag reorder itBYTE i;long temp:for (i=0; i64: i+)temp = (long) basic_table|i * scale_factor + 50L) / 100L;/ limit the values to the valid rangeif (temp 255L)

6、temp = 255L;newtablezigzagi = (BYTE) temp;void set_DQTinfo()BYTE scalefactor = 50:/ scalefactor controls the visual quality of the image / thesmaller is the better image well get. and the smaller/ compression well achieveDQTinfo.marker = OxFFDB;DQTinfo.length = 132;DQTinfo.QTYinfo = 0;DQTinfo.QTCbin

7、fo = 1; set_quant_table(std_luminance_qt, scalefactor,DQTinfo.Ytable); set_quant_table(std_chrominance_qt. scalefactor,DQTinfo.Cbtable);void vrite_DHTinfo()BYTE i;writeword(DHTinfo JNarker); vvriteword(DHTinfo.length);vvritebyte(DHTinfo.HTYDCinfo); for (i=0; i16; i+)vvritebyte(DHTinfo.YDC_nrcodesi);

8、 for(i=0: i12; i+)writebyte(DHTinfo.YDC_valuesi); writebyte(DHTinfo.HTYACinfo);for (i=0; i16; i+) writebyte(DHTinfo.YAC_nrcodesi);for (i=0: i162; i+)writebyte(DHTinfd.YAC_valuesi);vvritebyte(DHTinfo.HTCbDCinfo);for (i=0; i16; i+)writebyte(DHTinfo.CbDC_nrcodesi|); for (i=0; i12; i+)writebyte(DHTinfo.

9、CbDC_values i);writebyte(DHTinfo.HTCbACinfo);for (i=0; i16; i+) writebyte(DHTinfo.CbAC_nrcodes(i);for (i=0; i162; i+)writebyte(DHTinfo.CbAC_valuesi);void set_DHTinfo()BYTE i;/ fill the DHTinfo structure get the values from the standard Huffman tablesDHTinfo.marker = 0 xFFC4:DHTinfo.length = 0 x01 A2

10、;DHTinfo.HTYDCinfo = 0;for (i=0; i16; i+)DHTinfo. YDC_nrcodeslil = std_dc_luminance_nrcodes| i+11;for (i=0: i12; i+)DHTinfo.YDC_valuesi = std_dc_luminance_valuesij;DHTinfo.HTYACinfo = 0 x10:for (i=0; i16; i+)DHTinfo. YAC_nrcodeslil = std_ac _lu minance_nrcodesi+11;for (i=0; i162;i+)DHTinfo.YAC_value

11、si = std_ac_luminance_valuesi;DHTinfo.HTCbDCinfo = 1;for (i=0; i16; i+)DHTinfo.CbDC_nrcodesfi = std_dc_chrominance_nrcodesl i+1 ;for (i=0; i12; i+)DHTinfo.CbDC_valuesi = std_dc_chrominance_valuesi;DHTinfo.HTCbACinfo = 0 x11;for (i=0: i16; i+)DHTinfo.CbAC_nrcodes(i = std_ac_chrominance_nrcodes( i+1 ;

12、for (i=0; i162; i+)DHTinfo.CbAC_valuesi = std_ac_chrominance_valuesi;void write_SOSinfo()/Nothing to overwrite for SOSinfo vvriteword(SOSinfo.marker); writeword(SOSinfo.length);vvritebyte(SOSinfo.nrofcomponents); vvritebyte(SOSinfo.IdY);vvritebyte(SOSinfo.HTY): vvritebyte(SOSinfo.IdCb); vvritebyte(S

13、OSinfo.HTCb);vvritebyte(SOSinfo.IdCr); vvritebyte(SOSinfo.HTCr);vvritebyte(SOSinfo.Ss); vvritebyte(SOSinfo.Se); vvritebyte(SOSinfo.Bf);void write_comment(BYTE comment)WORD i, length:vvriteword(OxFFFE); / The COM marker length = strlen(const char *)comment); vvriteword(length + 2);for (i=0: ilength;

14、i+) writebyte(comment(i);void writebits(bitstring bs)/ A portable version; it should be done in assemblerWORD value;SBYTE posvaI7/ bit position in the bitstring we read. should be =0value = bs.value;posval = bsength - 1;while (posval = 0)if (value & maskposval)bytenew 1= maskfbyteposj;posval;bytepos

15、;if (bytepos 0)/ write itif (bytenew = OxFF)/ special casevvritebyte(OxFF): writebyte(O);elsevvritebyte(bytenew);/ reinitbytepos = 7:bytenew = 0;void coinpute_Huffman_table(BYTE *nrcodes, BYTE *std_table, bitstring *HT) BYTE kJ;BYTE pos_in_table;WORD codevalue;codevalue = 0;posjn_table = 0:for (k=l;

16、 k=16; k+)for (j=l; j=nrcodesk: j+)HT std_tableposjn_table .value = code value;HTstd_tab leposjn_table.length = k: pos_in_table+;codevalue+;codevalue = 1;void init_Huffman_lables()/ Compute the Huffman tables used for encodingcompute_Huffman_table(std_dcuminance_nrcodes, std_dc_luminance_values, YDC

17、_HT);compute_Huffman_table(std_acuminance_nrcodes, std_acuminance_values, YAC_HT)icompute_Huffman_tabIe(std_dc_chrominance_nrcodes, std_dc_chrominance_values, CbDC_HT):compute_Huffman_table(std_ac_chrominance_nrcodes, std_ac_chrominance_values, CbAC_HT):void exitmessage(char *error_message) printf(n

18、%stt*error_message); exit(EXIT_FAILURE);void setnunbers_category_and_bitcode()SDWORD nr;SDWORD nrlovver, nrupper;BYTE cat;category_alloc = (BYTE *)malloc(65535*sizeof(BYTE); if (category_alloc = NULL)exitmessage(nNot enough memory/*);/allow negative subscriptscategory = category_alloc + 32767;bitcod

19、e_alloc=(bitstring *)malloc(65535*sizeof(bitstring); if(bitcode_aIlo=NULL)exitmessage(”Not enough memory.M):bitcode = bitcode_alloc + 32767:nrlower = 1;nrupper = 2;for (cat=l; cat=15; cat+)/Positive numbersfor (nr=nrlower; nrnrupper: nr+)category | nr) = cat: bitcode|nr ength = cat; bitcodefnr. valu

20、e = (WORD)nr:/Negative numbersfor (ni-(nrupper-l); nr=-nrlower; nr+)categorynr = cat;bitcode|nr.length = cat: bitcodenr. value = (WORD)(nrupper-1 +nr); nrlower = 1;nrupper = 1;void precalculate_YCbCr_tables()WORD RGB;for (R=0: R256; R+)YRtabRl = (SDWORD)(65536水 0.299+0.5)*R;CbRtablRJ = (SDWORD)(6553

21、6*-06874+0 5)*R: CrRtabR = (SDWORD)(32768)*R;for (G=0: G256; G+)YGtabG = (SDWORD)(65536*0.587+0.5)*G;CbGtab|G = (SDWORD)(65536*-0.33126+0.5)*G:CrGtabGl = (SDWORD)(65536*-0.41869+0.5)*G: for (B=0: B256; B+)YBtabB = (SDWORD)(65536*014+0 5)*B;CbBtabBJ = (SDWORD)(32768 严 B:CrBtab(B = (SDWORD)(65536*-0.0

22、8131 +0.5)*B;/ Using a bit modified form of the FDCT routine from IJGs C source:/ Forward DCT routine idea taken from Independent JPEG Groups C source for / JPEG encoders/decoders/* For float AA&N IDCT method. divisors are equal to quantization coefficients scaled byscalefactorrow#scalefactorcol, wh

23、ere scalefactorjO = 1 scalefactor|kj = cos(k*PI/16) * sqrt(2) for k=1.7We apply a further scale factor of 8.Whats actually stored is 1/divisor so that the inner loop can use a multiplication rather than a division. */void prepare_quant_tables()double aanscalefactor8J = 1.0. 1.387039845, 1.306562965,

24、 1.175875602, 1.0, 0.78569495&0.541196100, 0.275899379;BYTE row, col;BYTE i = 0;for (row = 0; row 8: row卄)for (col = 0: col 8; col+)fdtbI_Y(i = (float) (1.0/(double) DQTinfo.Ytablezigzagi aanscalefactor|rowj *aanscalefactorcol * 8.0);fdtbI_Cbi = (float) (1.0 / (double) DQTinfo.Cbtablezigzagi *aansca

25、lefactor|row * aanscalefactorcol * 8.0);i+:void fdct_and_quantization(SBYTE *data?float *fdtbl. SWORD *outdata) float tmpO, tmpl, tmp2, tmp3. tmp4, tmp5, tmp6. tmp7: float tmplO. tmp 11, Imp 12. Imp 13;float zl, z2, z3, z4, z5, zl 1, z!3;float *dataptr;float datafloat64;float temp:SBYTE ctr;BYTE i;f

26、or (i=0; i= 0; ctr)tmpO = dataptr|O + dataptr|7|; tmp7 = dataptr|O - dataptr7J; tmpl = dataptr| 1 + dataptr|6J;tmp6 =dataptrj 1- dataptr6|; tmp2 =dataptr2+ dataptr5; tmp5 = dataptr2- dataptrj5; tmp3= dataptrj 3 + dataptr4; tmp4 = dataptr3J - dataptr4;/* Even part */tmplO = tmpO + tmp3; /* phase 2 */

27、 tmp 13 = UnpO - tmp3;tmpl 1 = tmpl + tmp2; tmp 12 = tmpl - tmp2;dataptr|O = tmplO + tmpl 1; /* phase 3 */ dataptr4 = tmplO - tmpl 1;zl = (tmp 12 + tmp 13) (float) 0.707106781);/* c4 */ dataptr2 = tmp 13 + zl; / phase 5 */dataptr|6 = tmp 13 zl;/* Odd part */tmplO = lmp4 + tmp5; / phase 2 */tmpl 1 =

28、tmp5 + tmp6;tmp 12 = tmp6 + tmp7;/The rotator ismodified fromfig 4-8 to avoid extra negations. / z5 = (tmplO - tmp 12) * (float)0.382683433); / c6 /z2 = (float) 0.541196100) * tmplO + z5; /* c2-c6 */z4 = (float)1.306562965)* tmp 12+ z5;/c2+c6 */z3 = tmpl 1 (float)0.707106781);/* c4 / phase 5 */* pha

29、se 6 */* advance pointer to next row */ Pass 2: process columns. / dataptr = datafloat;for (ctr = 7; ctr = 0; ctr)tmpO = dataptr|O + dataptr56; tmp7 = dataptrO - dataptr56|; tmp 1 = dataptrj 8 + dataptr|48;tmp6 = dataptr8 - dataptr48; tmp2 = dataptrj 16 + dataptr 40; tmp5 = dataptr| 16 -dataptr40; t

30、mp3 = dataptr24 + dataptr32; tmp4 = dataptr|24 - dataptr32;/ Even part */tmplO = ImpO + tmp3; /* phase 2 */ tmp 13 = ImpO - tmp3;tmpl 1 = tmpl + tmp2;tmp 12 = tmpl - tmp2;dataptrO = tmplO + tmpl 1; /* phase 3 */dataptr132 = tmp 10 - tmpl 1;z 1 = (tmp 12 + tmp 13) (float) 0.707106781 ):/ c4 */ datapt

31、r| 16 = tmp 13 + zl; /* phase 5 /dataptr|48 = tmp 13 - zl;/* Odd part */tmplO = lmp4 + tmp5; / phase 2 */ tmpl 1 = tmp5 + tmp6:tmp 12 = tmp6 + tmp7;/ The rotator is modified from fig 4-8 to avoid extra negations. */z5 = (tmplO - tmp!2) * (float) 0.382683433); / c6 /z2 = (float) 0.541196100) * tmplO

32、+ z5;/* c2-c6 /z4 = (float) 1.306562965) * tmpl2 + z5; /* c2+c6 */z3 = tmpl 1 (float) 0.707106781);/* c4 /zl 1 = tmp7 + z3;/* phase 5 */zl3 = tmp7 z3;zl 1 = tmp7 + z3; zl3 =tmp7 z3;dataptr5 = zl3 + z2;dataptr3 = zl3 - z2;dataptr| 1 = zl 1 +z4;dataptr7 = zl 1 - z4;dataptr += 8;dataptr|40 = zl3 + z2;

33、/* phase 6 */dataptr|24 = zl3 -z2;dataptr8 = zl 1 + z4:dataptr| 56 = zl 1 -z4;dataptr+;/ advance pointer to next column */ Quantize/descale the coefficients, and store into output array */ for (i = 0; i 64; i+)/* Apply the quantization and scaling factor */ temp = datafloati fdtbl|i;/* Round to near

34、est integerSince C does not specify the direction of rounding for negative quotients. vve have to force thedividend positive for portability The maxinnim coefficient sizeis +-16K (for12-bit data),so this codeshould work for either 16-bit or 32-bit ints /outdatai = (SWORD) (SWORD)(temp + 16384.5) - 1

35、6384); void process_DU(SBYTE *ComponentDU.float *fdtbl,SWORD *DC, bitstring *HTDC,bitstring *HTAC) bitstring EOB = HTAC0 x00|;bitstring M16zeroes = HTAC0 xF0;BYTE i;BYTE startpos;BYTE endOpos;BYTE nrzeroes;BYTE nrmarker:SWORD Diff;fdct_and_quantization(ComponentDU, fdtbl, DU_DCT):/ zigzag reorderfor

36、 (i=0: i0)&(DUend0pos=0); endOpos); /endOpos = first element in reverseorder != 0while (i = endOpos)start pos = i;for (; (DUi=0) & (i= 16)for (nrmarker=l; nrmarker=nrzeroes/l 6; nrmarker+) vvritebits(M 16zeroes);nrzeroes = nrzeroes% 16;vvritebits(HTACnrzeroes*16+categoryDUiH); writebits(bitcodeDUiJ)

37、;i+;if (endOpos != 63)vvritebits(EOB);void load_data_units_from_RGB_buffer(WORD xpos, WORD ypos) BYTE x, y;BYTE pos = 0;DWORD location;BYTE R. G.B;location = ypos * width + xpos;for (y=0: yv8; y+)for (x=0;x+)R = RGB_bufter location .R;G = RGB_buffer|location.G;B = RGB_bufferlocation|.B;/ convert to

38、YCbCrYDUpos = Y(R.G.B);CbDUJpos = Cb(R.G.B);CrDU|pos = Cr(R,G.B); location+;pos+:location += width - & void main_encoder()SWORD DCY = 0. DCCb = 0. DCCr = 0; /DC coefficients used for differential encoding WORD xpos,ypos;for (ypos=0: yposheight: ypos+=8)for (xpos=0: xposvvidth: xpos+=8)load_data_unit

39、s_from_RGB_buffer(xpos, ypos);proess_DU(YDU. fdtbl.Y. &DCY, YDC_HT. YAC_HT); proess_DU(CbDU,fdtbl_Cb. &DCCb. CbDC_HT. CbAC_HT);prcx:ess_DU(CrDU. fdtbl_Cb. &DCCr, CbDC_HT. CbAC_HT):void load_bitmap(char *bitmap_name. WORD *width_originaL WORD *height_original) WORD widthDiv8. heightDiv8; / closest mu

40、ltiple of 8 (ceilBYTE nr_fillingbytes;/The number of the filling bytes in the BMP file / (the dimension in bytes of a BMPline on the disk is divisible by 4) colorRGB lastcolor;WORD column:BYTE TMPBUF256;WORD nrline_up nrline_dn. nrline;WORD dimline;colorRGB *tinpline;FILE fp_bilmap = fopen(bitmap_na

41、me/,rbM); if(fp_bilmap=NULL)exitmessage(HCannot open bitmap file.File not found ?”); if(fread(TMPBUF. 1,54,fp_bitmap) != 54)exitmessage(”Need a truecolor BMP to encode/*);if(TMPBUF0!=B,)ll(TMPBUFl!=M,)ll(TMPBUF28J!=24) exitmessage(MNeed a truecolor BMP toencode.”);width = (WORD)TMPBUF( 19*256+TMPBUF

42、 18: height =(WORD)TMPBUF23*256+TMPBUF22;/ Keep the old dimensions of the image *vidth_original = width;*height_original = height;if(width%8 !=0)widlhDiv8 = (width/8)*8+8;elsevvidthDiv8 = width;if(height%8 !=0)heightDiv8 = (height/8)*8+8;elseheightDiv8 = height;/ The image we encode shall be filled

43、with the last line and the last column/ from the original bitmap, until width and height are divisible by 8/ Load BMP image from disk and complete XRGB_buffer = (colorRGB *)(malloc(3*widthDiv8*heightDiv8); if(RGB_buffer = NULL)exitmessage(HNot enough memory for the bitmap image.);if(width*3)%4 !=0)n

44、r_fillingbytes = 4-( (width*3)%4);elsenr_fillingbytes = 0;for (nrline=0; nrlineheight; nrline+)fread(RGB_buffer + nrline*widthDiv8, 1, width 未 3, fp_bitmap); fread(TMPBUF, L ingbytes,fp_bitmap);/ complete Xmemcpy(&lastcolor. RGB_buffer + nrline*widthDiv8 + width-1, 3);for (column=width; columnnrline

45、_dn: nrline_up-.nrline_dn+)memcpy(tmpline, RGB_buffer+nrline_up*widtlL dimline);memcpy(RGB_buffer+nrline_up*width. RGB_buffer+nrline_dn*width, dimline);memcpy(RGB_buffer+nrline_dn*width. tmpline. dimline);/ Y completion: memcpy(tmpline, RGB_buffer+(height-1 ) width, dimline);for (nrline=height; nrli

46、ne2) strcpy(JPG_filename,argv2);else/ replaceM.bmpHwith,.jpg,* strcpy(JPG_filename, BMP_filename);len_filename=strlen(BMP_filename); strcpy(JPG_filename+(len_filename-3)/,jpg);elseexitmessage(MSyntax: enc fis.bmp fis.jpg”);load_bitmap(BMP_filename, &width_originaL &height_original); fpjpeg_stream =f

47、open(JPG_filename/*wbM);init_all();SOFOinfo.widlh = width_original;SOFOinfo.height = height_original;writeword(0 xFFD8); / SOIvvrite_APPOinfo();/ write_comment(MCris made this JPEG with his own encoder*); write_DQTinfo(); vvrite_SOFOinfo();vvrite_DHTinfo(); vvrite_SOSinfo();/ init global variables b

48、ytenew = 0; / current byte bytepos = 7; / bit position in this byte main_encoder();/ Do the bit alignment of the EOI markerif (bytepos = 0)fillbits .length = bytepos + 1: fillbits.value = (1 (bytepos+1) - 1; writebits(fillbits);vvriteword(0 xFFD9); / EOI free(RGB_buffer); free(category_alloc); free(

49、bitcode_alloc); fclose(fppeg_stream);/JGLOBALS.HstaticBYTE bytenevv=O;/Thebytethat will bewrittenintheJPGfilestaticSBYTEbytepos=7;/ bitposition in thebyte we write (bytenew)/should be=0static WORD mask16= 1,2,4,& 16,32,6428.256.512.1024.204&4096.8192.16384.32768;/ The Huffman tables well use:static

50、bitstring YDC_HT 12;static bitstringCbDC_HT12;static bitstring YAC_HT256J;static bitstring CbA&HT256;static BYTE *category_alloc;static BYTE *category; /Here well keep the category of the numbers in range: -32767.32767 static bitstring*bitcode_alloc;static bitstring *bitcode; / their bitcoded repres

51、entation/Precalculated tables for a faster YCbCr-RGB transformation/ We use a SDWORD table because well scale values by 2A16 and work with integers static SDWORDYRtab256hYGtab256,YBtab256; static SDWORD CbRtab256.CbGtab256,CbBtab256;static SDWORD CrRtab256bCrGtab256.CrBtab256;static float fdtbl_Y64:

52、static float fdtbl_Cb64|; /the same with the fdtbl_Cr64|colorRGB *RGB_buffer; /image to be encodedWORD width, height:/ image dimensions divisible by 8static SBYTE YDU64; / This is the Data Unit of Y after YCbCr-RGB transformation static SBYTE CbDU|64;static SBYTE CiDU64;staticSWORD DU_DCT64; / Curre

53、nt DU (afterDCT and quantization) which well zigzag staticSWORD DU64j;/zigzag reordered DU which will be Huffman codedFILE *fpjpeg_stream;/JTABLES.Hstatic BYTE zigzag64= 0. 1,5, 6,14,15,27,28,2, 4. 7J3J6,26,29.42,3. 8 J 2,17,25,30,41,43,9,11&24,31.4044.53,10.19.23,32.39.45.52,54,20.22.33,3&46.51.55.

54、60.2134,3747.50.56.59,61,3536.4849.57.5&62,63 ;/* These are the sample quantization tables given in JPEG spec section K. 1 The spec says that the values givenproduce good” quality, and when divided by 2, very goodMquality.*/static BYTE std_luminance_qt64 = 16,11,10,16,24,40, 51,61,12,12,14,19,26,5&

55、60,55.14,13,16,24,40,57, 69,56,14,17,22,29,51,87,80,62,1&22,37,56, 6& 1 109.103,77,24,35,55,64, 81, 1104.113,92,49,64,7& 87, 1 103,121, 120. 101,72、 92,95, 9& 1 112,100, 103,99;static BYTE std_chrominance_qt64 = 17,1&24,47,99,99,99, 99,1&21,26,66,99,99,99, 99,24,26,56,99,99,99,99, 99.47,66,99,99,99,

56、99,99, 99,99.99,99,99,99,99,99, 99,99.99,99,99,99,99,99, 99.99.99,99,99,99,99,99, 99,99,99,99,99,99,99,99,99;/ Standard Huffman tables (cf. JPEG standard section K.3) */static BYTE std_dc_luininance_nrcodes| 17=0,0,1,5,1,1,1 丄 1,1 Q0.0.0.0Q0; static BYTEstd_dc_luminance_values 12=0, 1, 2, 3. 4. 5. 6

57、, 7, 8, 9, 10, 11;static BYTE std_dc_chrominance_nrcodes 17=0.0,3 丄 1丄 1 丄 1 丄 1,0.0.0Q0; static BYTEstd_dc_chrominance_values12=0, 1,2, 3,4, 5, 6, 7, 8,9, 10. 11;static BYTE std_ac_luminance_nrcodesl 7=0,021.3,32435.5.4,4 0.0,1.0 x7d ; static BYTEstd_ac_luminance_values 162= 0 x0L 0 x02. 0 x03,0 x0

58、0. 0 x04, Oxll, 0 x05,0 x12, 0 x21. 0 x31,0 x41.0 x06. Ox 13, 0 x51. 0 x61,0 x07, 0 x22,0 x71,0 x14, 0 x32, 0 x81,0 x91, Oxa 1,0 x08, 0 x23, 0 x42. Oxb 1, Oxc 1, 0 x15, 0 x52, Oxd 1. OxfO, 0 x24,0 x33. 0 x62, 0 x72, 0 x82, 0 x09, 0 x0a, 0 x16, 0 x17, 0 x18. 0 x19, Ox la, 0 x25, 0 x26, 0 x27,0 x28, 0

59、 x29, 0 x2a.0 x34, 0 x35. 0 x36. 0 x37, 0 x38,0 x39. 0 x3a, 0 x43.0 x44, 0 x45. 0 x46. 0 x47, 0 x48, 0 x49, 0 x4a, 0 x53,0 x54,0 x55, 0 x56, 0 x57.0 x58, 0 x59. 0 x5a, 0 x63,0 x64, 0 x65, 0 x66, 0 x67, 0 x6& 0 x69, 0 x6a, 0 x73,0 x74, 0 x75,0 x76, 0 x77, 0 x7& 0 x79, 0 x7a, 0 x83,0 x84, 0 x85, 0 x86

60、. 0 x87, 0 x8& 0 x89, 0 x8a, 0 x92,0 x93, 0 x94. 0 x95,0 x96. 0 x97,0 x98. 0 x99. 0 x9a. 0 xa2, 0 xa3. 0 xa4, 0 xa5, 0 xa6, 0 xa7 0 xa8. 0 xa9, Oxaa. Oxb2, Oxb3,0 xb4, Oxb5, 0 xb6, Oxb7, Oxb8. Oxb9. Oxba. 0 xc2. 0 xc3 0 xc4, 0 xc5, 0 xc6, 0 xc7, Oxc& 0 xc9, Oxca,Oxd2, Oxd3,0 xd4, Oxd5, 0 xd6. Oxd7,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论