Tài liệu PHỤ LỤC - XỬ LÝ ẢNH pptx

103 424 0
Tài liệu PHỤ LỤC - XỬ LÝ ẢNH pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

PHỤ LỤC - XỬ LÝ ẢNH Phụ lục gồm listing chương trình trình bày cách chi tiết định dạng ảnh: BMP, PCX, TIFF, GIF, môđul chương trình thực cơng đoạn q trình xử lý ảnh Chương trình viết C Visual C coi cơng cụ đơn giản minh hoạ bước xử lý ảnh Các ảnh minh hoạ sách lấy từ kết thực chương trình Nhóm chương trình nạp lưu ảnh Việc nạp ảnh từ tệp vào mảng số lưu ảnh từ mảng lên tệp cần thiết cho chức xử lý Chính thế, phần chương trình có tổ chức moduls riêng: - BMP.H: Thực việc mở đọc ảnh số từ “tệp *.BMP” vào “mảng” chiều - PCX.H: Thực việc mở đọc ảnh số từ “tệp *.PCX” vào “mảng” chiều  BMP.H // Chứa khai báo file ảnh BMP & thủ tục mở file // typedef unsigned int WORD; typedef unsigned long DWORD; typedef unsigned char BYTE; typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfoffBits; } BITMAPFILEHEADER; typedef struct tagBITMAPINFOHEADER { DWORD biSize; long biWidth; long biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; NhËp m«n xư lý ảnh số - ĐHBK Hà nội 267 PH LC - XỬ LÝ ẢNH DWORD biSizeImage; long biXPelsPerMeter; long biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER; typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; BYTE huge *InImage; unsigned long p,chieucao,chieurong; int OpenBitmapFile(char *fname,int *fh, BITMAPFILEHEADER *bmfhd, BITMAPINFOHEADER *bmihd); int ReadBitmapPalette(int fh, int numcl, RGBQUAD *bmpals); int GetScanLine(int fh, int BytePerLine, BITMAPINFOHEADER *bih, int x, int y); void SetRGBPalette(int index,int red ,int green,int blue); void SetRGBPalettes(int index, int red, int green, int blue); int GetBitmapToArray(char *fname); extern void Error(unsigned OrderError); //***************************************** // //Mở file bitmap // int OpenBitmapFile(char *fname,int *fh,BITMAPFILEHEADER *bmfhd, BITMAPINFOHEADER *bmihd) {int tmp; *fh = _open(fname,O_RDONLY); if(*fh == -1) return -1; // không mở file tmp = _read(*fh,bmfhd,sizeof(BITMAPFILEHEADER)); if (tmp == -1) { close(*fh); return -1;// lỗi đọc file } if(bmfhd->bfType != 0x4D42) Nhập môn xử lý ảnh số - ĐHBK Hà néi 268 PHỤ LỤC - XỬ LÝ ẢNH { close(*fh); return -2 ;// dạng BMP } tmp = _read(*fh,bmihd,sizeof(BITMAPINFOHEADER)); if(tmp != sizeof(BITMAPINFOHEADER)) { close(*fh); return -2 ;//không phải dạng BMP } if (bmihd->biCompression == 0) { bmihd->biSizeImage = (bmfhd->bfSize-bmfhd>bfoffBits); } return 0; } //end of function //******************************************************** // //Đọc bảng màu file bitmap // int ReadBitmapPalette(int fh,int numcl,RGBQUAD *bmpals) { int numbyte,tmp; numbyte=numcl*sizeof(RGBQUAD); lseek(fh,sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER), SEEK_SET); tmp=_read(fh,(void*)bmpals,numbyte); if (tmp == -1) { close(fh);return -1; } if(tmp!=numbyte) {close(fh);return -2; } return 0; } // end of function //******************************************// int GetScanLine(int fh,int BytePerLine,BITMAPINFOHEADER *bih) //Đọc dòng ảnh vào mảng // Nhập môn xử lý ảnh số - ĐHBK Hà nội 269 PHỤ LỤC - XỬ LÝ ẢNH { BYTE *buff; int tmp,ppb,mask,i,j,cx,nb,cl; buff=(BYTE *)malloc(BytePerLine+1); if(buff==NULL) {return -3; //Không đủ nhớ } tmp=_read(fh,buff,BytePerLine); if(tmp != BytePerLine) {return -1; } ppb=8/bih->biBitCount; mask=(1 biBitCount)-1; for(i=0,cx=0;i (bih->biBitCount * (ppb-1-j)); cl=cl & mask; InImage[p++]= cl; if(cx == bih->biWidth) break; } if(cx >= bih->biWidth) break; } free(buff); return 0; } //****************************************// void SetRGBPalette(int index,int red ,int green,int blue) { int r,g,b,cl; red >>= 6; r=(red & 1) = 6; g= (green & 1) >= 6; b= (blue & 1) > 1; cl=r+g+b; _AX=0x1000; _BL=index; _BH=cl; geninterrupt(0x10); Nhập môn xử lý ảnh số - ĐHBK Hà néi 270 PHỤ LỤC - XỬ LÝ ẢNH } //***************************************** // void SetRGBPalettes(RGBQUAD *pals,int numcl) { int i; for(i=0;irgbRed,(pals+i) ->rgbGreen, (pals+i) - >rgbBlue); } } //********************************************* // // Đọc File BMP vào mảng nhớ // int GetBitmapToArray(char *fname) { int i,j,tmp,numcolor,BytePerLine,bmfilehand; BITMAPINFOHEADER bminfohdr; BITMAPFILEHEADER bmfilehdr; RGBQUAD *bmpalettes; tmp=OpenBitmapFile(fname,&bmfilehand,&bmfilehdr, &bminfohdr); chieucao= bminfohdr.biHeight; chieurong= bminfohdr.biWidth; switch(tmp) {case -1: return(1); //break; //không mở file case -2: return(2); //break; //lỗi file } numcolor=1

Ngày đăng: 17/12/2013, 11:15

Hình ảnh liên quan

{outtextxy(70,465,"Không còn vùng nhớ cho cất màn hình !");     exit(1); - Tài liệu PHỤ LỤC - XỬ LÝ ẢNH pptx

outtextxy.

(70,465,"Không còn vùng nhớ cho cất màn hình !"); exit(1); Xem tại trang 17 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan