




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
7-PAGE20第1章VC#圖像處理學(xué)習(xí)內(nèi)容與要點(diǎn):本章介紹VC#圖像處理基礎(chǔ)、圖像文件的打開、保存方法及圖像的移動(dòng)、尺寸變換、分辨率變換等操作的基本知識(shí)和處理技巧。主要有:?VC#圖像處理基礎(chǔ)?圖像文件的打開和保存?圖像的拷貝和粘貼?圖像的放大和縮小?圖像的分辨率變換等。技術(shù)要點(diǎn):?Clipboard對(duì)象的使用?SystemImage方法的使用1.1VC#圖像處理基礎(chǔ)1.1.1VisualC#圖像處理組件使用CDI+可以顯示和處理多種格式的圖像文件。使用Windows窗體PictureBox控件,可以在設(shè)計(jì)時(shí)將Image屬性設(shè)置為有效圖片,從而在窗體上加載和顯示圖片??墒褂玫膱D像文件類型如表7-1所示。表7-1圖像文件類型類型文件擴(kuò)展名位圖.bmpIcon.icoGIF.gif圖元文件.wmfJPEG.jpg1.1.2Bitmap對(duì)象Bitmap對(duì)象是用于處理由像素?cái)?shù)據(jù)定義的圖像的對(duì)象。對(duì)圖像文件進(jìn)行處理的類主要為Bitmap類和ImageAttributes類,Bitmap類屬于System.Drawing命名空間,該命名空間提供了對(duì)GDI+基本圖形功能的訪問。Bitmap類封裝GDI+位圖,此位圖由圖形圖像及其屬性的像素?cái)?shù)據(jù)組成。Bitmap的常用方法和屬性如表7-2所示。表7-2Bitmap的常用方法和屬性公共屬性屬性說明Flags獲取此Image對(duì)象的屬性標(biāo)記。FrameDimensionsList獲取GUID的數(shù)組.Height獲取此Image對(duì)象的高度。HorizontalResolution獲取此Image對(duì)象的水平分辨率.Palette獲取或設(shè)置用于此Image對(duì)象的調(diào)色板。PhysicalDimension獲取此Image對(duì)象的寬度和高度。PixelFormat獲取此Image對(duì)象的像素格式。PropertyIdList獲取存儲(chǔ)在此Image對(duì)象中的屬性ID的數(shù)組。RawFormat獲取此Image對(duì)象的格式。Size獲取此Image對(duì)象的寬度和高度。VerticalResolution獲取此Image對(duì)象的垂直分辨率。Width獲取此Image對(duì)象的寬度。公共方法方法說明Clone已重載。創(chuàng)建此Bitmap部分的副本。Equals確定兩個(gè)Object實(shí)例是否相等。FromResource從指定的Windows資源創(chuàng)建Bitmap對(duì)象。GetEncoderParameterList返回有關(guān)指定的圖像編碼器所支持的參數(shù)的信息。GetFrameCount返回指定維度的幀數(shù)。GetPixel獲取此Bitmap中指定像素的顏色。GetPropertyItem從該Image對(duì)象獲取指定的屬性項(xiàng)。GetThumbnailImage返回此Image對(duì)象的縮略圖。GetType獲取當(dāng)前實(shí)例的Type。LockBits將Bitmap對(duì)象鎖定到系統(tǒng)內(nèi)存中。MakeTransparent使默認(rèn)的透明顏色對(duì)此Bitmap透明。RotateFlip旋轉(zhuǎn)、翻轉(zhuǎn)或者同時(shí)旋轉(zhuǎn)和翻轉(zhuǎn)Image對(duì)象。Save將Image對(duì)象以指定的格式保存到指定的Stream對(duì)象。SaveAdd將指定的Image對(duì)象中的信息添加到此Image對(duì)象中。SelectActiveFrame選擇由維度和索引指定的幀。SetPixel設(shè)置Bitmap對(duì)象中指定像素的顏色。SetPropertyItem將指定的屬性項(xiàng)設(shè)置為指定的值。SetResolution設(shè)置此Bitmap的分辨率。 ImageAttributes類屬于System.Drawing.Imaging命名空間。它有許多可用于在在圖像處理過程中修改圖像的屬性。ImageAttributes的基本方法和屬性如表7-3所示。表7-23ImageAttributes的基本方法和屬性公共方法方法說明ClearBrushRempTable清除Brush對(duì)象顏色重新映射表。ClearColorKey清除ColorAdjustType枚舉指定的GDI+對(duì)象的顏色鍵值。ClearColorMatrix顏色調(diào)整矩陣清零。ClearGamma清除ColorAdjustType枚舉指定的GDI+對(duì)象的伽瑪值。ClearNoOp清除所有GDI+對(duì)象的NoOp設(shè)置。ClearOutputChannel清除ColorAdjustType枚舉指定的GDI+對(duì)象的輸出信道選擇。ClearOutputChannelColorProfile清除ColorAdjustType枚舉指定的GDI+對(duì)象的輸出信道選擇和顏色配置文件。ClearRemapTable清除ColorAdjustType枚舉指定的GDI+對(duì)象的顏色重新映射表。ClearThreshold清除所有相關(guān)的GDI+對(duì)象的閾值。Clone創(chuàng)建該ImageAttributes對(duì)象的一個(gè)精確副本。Dispose釋放ImageAttributes對(duì)象使用的所有資源。Equals確定兩個(gè)Object實(shí)例是否相等。GetAdjustedPalette獲取調(diào)整顏色后的調(diào)色板。GetHashCode在哈希算法和數(shù)據(jù)結(jié)構(gòu)(如哈希表)中使用的特定類型的哈希函數(shù)。GetType獲取當(dāng)前實(shí)例的Type。SetBrushRemapTable設(shè)置重新映射表以轉(zhuǎn)換Brush顏色。SetColorKey為ColorAdjustType枚舉指定的GDI+對(duì)象設(shè)置低顏色值和高顏色值。SetColorMatrices為圖像顏色設(shè)置顏色調(diào)整矩陣,并為灰度值設(shè)置單獨(dú)的灰度調(diào)整矩陣。提供顏色矩陣標(biāo)志。SetColorMatrix將5x5顏色調(diào)整矩陣設(shè)置為具有指定ColorMatrixFlag枚舉的指定Matrix對(duì)象。SetGamma為所有GDI+對(duì)象設(shè)置伽瑪值。SetNoOp為ColorAdjustType枚舉指定的GDI+對(duì)象設(shè)置NoOp校正值。SetOutputChannel依據(jù)ColorChannelFlag枚舉的指定,為所有相關(guān)的GDI+對(duì)象設(shè)置輸出顏色通道。SetOutputChannelColorProfile使用字符串中指定的顏色配置文件,為所有GDI+對(duì)象設(shè)置輸出顏色通道。SetRemapTable按照ColorMap對(duì)象的指定,為ColorAdjustType枚舉指定的GDI+對(duì)象設(shè)置重新映射表。SetThreshold為所有適當(dāng)?shù)腉DI+對(duì)象設(shè)置雙級(jí)映射閾值。SetWrapMode只設(shè)置環(huán)繞模式。ToString返回表示當(dāng)前Object的String。 使用ImageAttributes制作半透明圖像的程序例子如下:Graphicsg=this.pictureBox1.CreateGraphics();stringpath=@"C:\DocumentsandSettings\Administrator\MyDocuments\MyPictures\樣品.jpg"; //創(chuàng)建Bitmap對(duì)象并使用“樣品.jpg”圖像加載 //初始化顏色矩陣 //注意第4行、4列的值為0.8 Bitmapbitmap=newBitmap(path); float[][]matrixItems={ newfloat[]{1,0,0,0,0}, newfloat[]{0,1,0,0,0}, newfloat[]{0,0,1,0,0}, newfloat[]{0,0,0,0.8f,0}, newfloat[]{0,0,0,0,1} }; ColorMatrixcolorMatrix=newColorMatrix(matrixItems); //創(chuàng)建ImageAttributes對(duì)象并且設(shè)置它的顏色矩陣 ImageAttributesimageAtt=newImageAttributes(); imageAtt.SetColorMatrix( colorMatrix,ColorMatrixFlag.Default, ColorAdjustType.Bitmap ); intiWidth=bitmap.Width; intiHeight=bitmap.Height; //首先,繪一較寬的黑線 g.DrawLine( newPen(Color.Black,25), newPoint(10,35), newPoint(200,35)); //繪半透明的Bitmap圖像 g.DrawImage(bitmap,newRectangle(30,0,iWidth,iHeight),0,0,iWidth,iHeight, GraphicsUnit.Pixel,imageAtt);在這個(gè)程序中,ImageAttributes對(duì)象將所有的alpha值設(shè)置為其原始值得80%。方法是通過初始化一個(gè)顏色矩陣并將矩陣中的alpha縮放值設(shè)置為0.8來實(shí)現(xiàn)的。顏色矩陣的地址被傳遞給ImageAttributes對(duì)象的SetColorMatrix方法,ImageAttributes對(duì)象被傳遞給Graphics對(duì)象的DrawImage方法。程序運(yùn)行結(jié)果如圖1-1所示。在顯示過程中,位圖中的各個(gè)alpha值被轉(zhuǎn)換成其原始值的80%,這將出現(xiàn)與背景相混合的圖像。從圖1-1中看到,位圖圖像看上去是透明的,透過圖像可看到一個(gè)純黑的寬線條。 圖1-1使用ImageAttributes對(duì)象的例子1.1.3圖像的顏色(Color)系統(tǒng)對(duì)圖像進(jìn)行處理時(shí)用GetPixel獲取此Bitmap中指定像素的顏色。這些顏色是由(R,G,B)三基色和(A)透明度組成的。獲取顏色值的具體方法為:(1)定義BitmapBitmapmyBitmap=newBitmap("C:\MyImages\TestImage.bmp");(2)在程序中輸入myBitmap.后系統(tǒng)會(huì)自動(dòng)彈處bitmap的所有屬性,在這里我們使用GetPixel屬性來獲得顏色值,如圖1-2所示。圖1-2用GetPixel屬性來獲得顏色值(3)定義一個(gè)顏色變量把在指定位置所取得的像素值存入顏色變量中Colorc=newColor();c=mybitmap.GetPixel(10,10);(4)對(duì)顏色值進(jìn)行分解分解出單色分量值,如圖1-3所示。圖1-3顏色分解顏色的基本屬性如表7-4所示。表7-4顏色的基本屬性方法說明A獲取此Color結(jié)構(gòu)的alpha分量值。取值(0—255)B獲取此Color結(jié)構(gòu)的藍(lán)色分量值。取值(0—255)G獲取此Color結(jié)構(gòu)的綠色分量值。取值(0—255)R獲取此Color結(jié)構(gòu)的紅色分量值。取值(0—255)Name獲取此Color名稱的名稱。這將返回用戶定義的顏色的名稱或已知顏色的名稱(如果該顏色是從某個(gè)名稱創(chuàng)建的)。對(duì)于自定義顏色,將返回RGB值。顏色的基本方法如表7-5所示。表7-5顏色的基本方法方法說明Equals測試指定的對(duì)象是否為Color結(jié)構(gòu)并等效于此Color結(jié)構(gòu)。FromArgb從四個(gè)8位ARGB分量(alpha、紅色、綠色和藍(lán)色)值創(chuàng)建Color結(jié)構(gòu)。FromKnownColor從指定的預(yù)定義顏色創(chuàng)建一個(gè)Color結(jié)構(gòu)。FromName從預(yù)定義顏色的指定名稱創(chuàng)建一個(gè)Color結(jié)構(gòu)。GetBrightness獲取此Color結(jié)構(gòu)的“色調(diào)-飽和度-亮度”(HSB)的亮度值。GetHashCode返回此Color結(jié)構(gòu)的哈希代碼。GetHue獲取此Color結(jié)構(gòu)的“色調(diào)-飽和度-亮度”(HSB)的色調(diào)值,以度為單位。GetSaturation獲取此Color結(jié)構(gòu)的“色調(diào)-飽和度-亮度”(HSB)的飽和度值。GetType獲取當(dāng)前實(shí)例的Type。ToArgb獲取此Color結(jié)構(gòu)的32位ARGB值。ToKnownColor獲取此Color結(jié)構(gòu)的KnownColor值。圖像的輸入和保存1.2.1圖像的輸入在窗體或圖形框內(nèi)輸入圖像有兩種方式:一是在窗體設(shè)計(jì)時(shí)使用對(duì)象的Image屬性輸入,二是在程序中使用通用輸入對(duì)話框輸入。1.窗體設(shè)計(jì)時(shí)使用對(duì)象的Image屬性輸入窗體設(shè)計(jì)時(shí)使用對(duì)象的Image屬性輸入圖像的操作如下:(1)選擇對(duì)象屬性中的Image屬性。例如,在窗體內(nèi)輸入圖像時(shí),如圖1-4所示。 圖1-4屬性對(duì)話框(2)單擊Image屬性右側(cè)的“…”,則彈出一個(gè)“打開”對(duì)話框,如圖1-5所示。 圖1-5“打開”對(duì)話框(3)選擇圖像文件后,單擊“打開”按鈕。2.在設(shè)計(jì)時(shí)清除圖片在“屬性”窗口中,選擇Image屬性,并右擊出現(xiàn)在圖像對(duì)象名稱左邊的小縮略圖圖像。選擇“重置”。1.使用打開對(duì)話框輸入圖象使用命令按鈕和輸入對(duì)話框輸入圖像時(shí),單擊命令鈕事件的過程例子如下:privatevoidbutton2_Click(objectsender,System.EventArgse) { OpenFileDialogofdlg=newOpenFileDialog(); ofdlg.Filter="BmpFile(*.bmp)|*.bmp"; if(ofdlg.ShowDialog()==DialogResult.OK) { Bitmapimage=newBitmap(ofdlg.FileName); pictureBox1.Image=image; } }執(zhí)行該過程時(shí),將打開輸入對(duì)話框,選擇合適的圖像文件。[例7-1]建立如圖1-6所示的界面。單擊命令鈕彈出一個(gè)輸入對(duì)話框,在pictureBox1中輸入圖像。圖1-6界面設(shè)計(jì)設(shè)計(jì)步驟如下:(1)建立如圖1-6所示的窗體。(2)編寫命令鈕的事件過程中的代碼。privatevoidbutton2_Click(objectsender,System.EventArgse) { OpenFileDialogofdlg=newOpenFileDialog(); ofdlg.Filter="BmpFile(*.bmp)|*.bmp"; if(ofdlg.ShowDialog()==DialogResult.OK) { Bitmapimage=newBitmap(ofdlg.FileName); pictureBox1.Image=image; } }(3)運(yùn)行后單擊圖像輸入按鈕,則彈出一個(gè)輸入對(duì)話框,選擇圖像文件名。例子如圖1-7所示。圖1-7輸入圖像(4)將打開對(duì)話框加入項(xiàng)目的操作如下:單擊【視圖】【工具箱】,則彈出如圖1-8所示的工具箱窗口,雙擊其中的openFileDialog項(xiàng),則該控件加入項(xiàng)目。圖1-8工具箱(5)本例程序的名稱空間及自動(dòng)生成的程序usingSystem;//加載System命名空間,此命名空間包含定義常用的值、引用數(shù)據(jù)類型、事件和事件處理程序等的基本類和基類usingSystem.Drawing;//此命名空間包含對(duì)GDI+圖形功能訪問的類usingSystem.Collections;//此命名空間包含接口和類usingSystem.ComponentModel;//此命名空間包含實(shí)現(xiàn)組件和控件運(yùn)行時(shí)和設(shè)計(jì)時(shí)行為的類usingSystem.Windows.Forms;//此命名空間包含用于創(chuàng)建基于Windows的應(yīng)用程序的類,以充分利用Windows操作系統(tǒng)中提供的豐富的用戶界面功能。usingSystem.Data;//此命名空間主要包含構(gòu)成ADO.NET結(jié)構(gòu)的類namespace保存//聲明命名空間{ ///<summary> ///Form1的摘要說明。 ///</summary> publicclassForm1:System.Windows.Forms.Form//定義Form1窗體類 { privateSystem.Windows.Forms.Buttonbutton1;//聲明私有按鈕變量button1privateSystem.Windows.Forms.PictureBoxpictureBox1;//聲明私有按鈕變量//pictureBox1privateSystem.Windows.Forms.SaveFileDialogsaveFileDialog1;//聲明私有按鈕變量//saveFileDialog1 privateSystem.Windows.Forms.Buttonbutton2;//聲明私有按鈕變量button2privateSystem.Windows.Forms.OpenFileDialogopenFileDialog1;//聲明私有按鈕變量//openFileDialog1 ///<summary> ///必需的設(shè)計(jì)器變量。 ///</summary> privateSystem.ComponentModel.Containercomponents=null; publicForm1() {//Form1類的構(gòu)造函數(shù) // //Windows窗體設(shè)計(jì)器支持所必需的 // InitializeComponent();//組件初始化,不能使用代碼編輯器修改此方法的內(nèi)容 // //TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼 // } ///<summary> ///清理所有正在使用的資源。 ///</summary> protectedoverridevoidDispose(booldisposing) {//重載基類函數(shù)Dispose釋放由Component占用的資源。 if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); }///<summary> ///應(yīng)用程序的主入口點(diǎn)。 ///</summary> [STAThread] staticvoidMain() { Application.Run(newForm1());//new運(yùn)算符在堆上調(diào)用構(gòu)造函數(shù)創(chuàng)建Form1對(duì)象 //Run在當(dāng)前線程上運(yùn)行標(biāo)準(zhǔn)Windows應(yīng)用程序循環(huán) }1.2.2圖像的保存保存圖像步驟如下:(1)當(dāng)使用按鈕和保存對(duì)話框保存文件時(shí),加入保存按鈕,窗體設(shè)計(jì)如圖1-9所示。圖1-9保存項(xiàng)目界面(2)如圖1-10所示,將工具箱中的SaveFileDialog控件加入項(xiàng)目。圖1-10工具箱(3)保存命令鈕事件過程代碼privatevoidbutton1_Click(objectsender,System.EventArgse) {stringstr,str1; Bitmapbox1=newBitmap(pictureBox1.Image); Graphicsg=this.CreateGraphics(); saveFileDialog1.Filter="bmp文件(*.BMP)|*.BMP|AllFile(*.*)|*.*"; saveFileDialog1.ShowDialog();str=saveFileDialog1.FileName; pictureBox1.Image.Save(str); }執(zhí)行該過程時(shí),將打開另存為對(duì)話框,如圖1-11所示。圖1-11另存為對(duì)話框選擇合適的文件夾和文件名保存。1.3圖像拷貝和粘貼圖像拷貝和粘貼是圖像處理的基本操作之一。使用AxPictureClip控件剪切和粘貼圖像,名稱空間是System.Winforms。在C#中,ClipBoard類提供了將數(shù)據(jù)放在系統(tǒng)剪貼板以及從系統(tǒng)剪貼板恢復(fù)數(shù)據(jù)的方法。Clipboard類只有3個(gè)成員,它們是剪貼板構(gòu)造器、GetDataObject和SetDataObject。1.剪貼板構(gòu)造器Clipboad類直接從Object類中派生出來。我們可以在應(yīng)用程序中直接調(diào)用Clipboard類,或者使用剪貼板構(gòu)造器來創(chuàng)建一個(gè)剪貼板實(shí)例:Clipboard=newClipboard();甚至可以直接在應(yīng)用程序中調(diào)用Clipboard:IDataObjectiData=System.WinForms.Clipboard.GetDataObject();2.SetDataObject方法我們可以調(diào)用SetDataObject方法實(shí)現(xiàn)在剪貼板上復(fù)制或剪切數(shù)據(jù)。SetDataObject方法有兩個(gè)定義:publicstaticvoidSetDataObject(Object);這種方法使用了一個(gè)Object類型參數(shù),它可以是任何數(shù)據(jù),例如:stringstr="MaheshwritingdatatotheClipboard";SetDataObject(str);使用這個(gè)方法,就可以把任何類型的數(shù)據(jù)放在剪貼板上。另外一種方法接受兩個(gè)參數(shù):publicstaticvoidSetDataObject(Objectdata,boolcopy);copy這個(gè)參數(shù)指明應(yīng)用程序退出后,數(shù)據(jù)是否應(yīng)該保留在剪貼板上。stringstr="MaheshwritingdatatotheClipboardusingCopybool";SetDataObject(str,true);3.GetDataObject方法GetDataObject方法負(fù)責(zé)從剪貼板中恢復(fù)當(dāng)前數(shù)據(jù),它將返回IdataObject:publicstaticIDataObjectGetDataObject();比如說:IDataObjectdtObj=Clipboard.GetDataObject();現(xiàn)在就可以調(diào)用IDataObject的GetFormats來找出剪貼板上的數(shù)據(jù)格式了,比如說:privatevoidCutCopyData(){Clipboard.SetDataObject(textBox1.SelectedText);}privatevoidPasteData(){IDataObjectiData=Clipboard.GetDataObject();//Determinewhetherthedataisinaformatyoucanuse.if(iData.GetDataPresent(DataFormats.Text)){stringstr=(String)iData.GetData(DataFormats.Text);}}[例7-2]使用Clipboard對(duì)象的拷貝和粘貼使用Clipboard對(duì)象可以進(jìn)行圖像的拷貝和粘貼。將Picturebox1的圖像拷貝到剪切板的程序如下:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespace剪切圖片{ ///<summary> ///Form1的摘要說明。 ///</summary> publicclassForm1:System.Windows.Forms.Form { privateSystem.Windows.Forms.PictureBoxpictureBox1; privateSystem.Windows.Forms.PictureBoxpictureBox2; privateSystem.Windows.Forms.Buttonbutton1; privateSystem.Windows.Forms.Buttonbutton2; ///<summary> ///必需的設(shè)計(jì)器變量。 ///</summary> privateSystem.ComponentModel.Containercomponents=null; publicForm1() { // //Windows窗體設(shè)計(jì)器支持所必需的 // InitializeComponent(); // //TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼 // } ///<summary> ///清理所有正在使用的資源。 ///</summary> protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); }privatevoidbutton1_Click(objectsender,System.EventArgse) { Clipboard.SetDataObject(pictureBox1.Image); }將剪切板的內(nèi)容粘貼到Picturebox時(shí)使用Clipboard.GetDataObject();方法例如,粘貼剪切板的內(nèi)容到Picturebox2時(shí),可寫為:pictureBox2.Image=(Bitmap)iData.GetData(DataFormats.Bitmap);粘貼剪切板的內(nèi)容到Picturebox2的程序如下:privatevoidbutton2_Click(objectsender,System.EventArgse) { IDataObjectiData=Clipboard.GetDataObject(); if(iData.GetDataPresent(DataFormats.Bitmap)) { pictureBox2.Image=(Bitmap)iData.GetData(DataFormats.Bitmap); } }[例7-3]使用Clipboard對(duì)象的拷貝和粘貼(1)建立如圖1-12所示的窗體。在圖片框1輸入圖像,然后拷貝到圖片框2。 圖1-12窗體設(shè)計(jì)(2)將圖像輸入到圖片框1,如圖1-12所示。單擊“復(fù)制”按鈕后擊“粘貼”按鈕,則圖片框1的圖像被拷貝到圖片框2,如圖1-13所示。圖1-13圖像輸入到圖片框2[例7-4]使用AxPictureClip控件剪切和粘貼圖像界面設(shè)計(jì)界面設(shè)計(jì)如圖1-14所示。圖1-14界面設(shè)計(jì)程序設(shè)計(jì)usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespace剪切和復(fù)制{ ///<summary> ///Form1的摘要說明。 ///</summary> publicclassForm1:System.Windows.Forms.Form { privateSystem.Windows.Forms.PictureBoxpictureBox1; privateAxPicClip.AxPictureClipaxPictureClip1; privateSystem.Windows.Forms.Buttonbutton1; privateSystem.Windows.Forms.PictureBoxpictureBox2; ///<summary> ///必需的設(shè)計(jì)器變量。 ///</summary> privateSystem.ComponentModel.Containercomponents=null; publicForm1() { // //Windows窗體設(shè)計(jì)器支持所必需的 // InitializeComponent(); // //TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼 // } ///<summary> ///清理所有正在使用的資源。 ///</summary> protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); }///<summary> ///應(yīng)用程序的主入口點(diǎn)。 ///</summary> [STAThread] staticvoidMain() { Application.Run(newForm1()); } privatevoidbutton1_Click(objectsender,System.EventArgse) { axPictureClip1.Picture=pictureBox1.Image;axPictureClip1.ClipX=0; axPictureClip1.ClipY=0; axPictureClip1.ClipWidth=400; axPictureClip1.ClipWidth=400; axPictureClip1.Picture=axPictureClip1.get_GraphicCell(0); pictureBox2.Image=axPictureClip1.Picture; } }}運(yùn)行結(jié)果運(yùn)行結(jié)果如圖1-15所示。圖1-15使用AxPictureClip控件剪切和粘貼1.4彩色圖像的分辨率圖像的分辨率決定了圖像與原物的逼近程度。對(duì)同一大小的圖像,其像素?cái)?shù)越多,即將圖像分割的越細(xì),圖像越清晰,稱之為分辨率高,反之分辨率低。分辨率的高低取決于采樣操作。例如,對(duì)于一幅256*256分辨率的圖像,采用變換的方法可以實(shí)現(xiàn)不同分辨率顯示。1.4.1將256*256分辨率的圖像變換為128*1281.算法說明將256*256分辨率的圖像變換為128*128分辨率方法是將源圖像分成2*2的子圖像塊,如圖1-16所示。然后將該2*2子圖像塊的所有像素的顏色均按F(I,j)的顏色值進(jìn)行設(shè)定,達(dá)到降低分辨率的目的。F(I,j)F(I+1,j)F(I,j+1)F(I+1,j+1) 圖1-163。界面設(shè)計(jì)界面設(shè)計(jì)如圖1-17所示。圖1-17界面設(shè)計(jì)程序設(shè)計(jì)usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespace尺寸變換和分辨率{ ///<summary> ///Form1的摘要說明。 ///</summary> publicclassForm1:System.Windows.Forms.Form { privateSystem.Windows.Forms.MainMenumainMenu1; privateSystem.Windows.Forms.MenuItemmenuItem1; privateSystem.Windows.Forms.MenuItemmenuItem2; privateSystem.Windows.Forms.MenuItemmenuItem3; privateSystem.Windows.Forms.MenuItemmenuItem4; privateSystem.Windows.Forms.MenuItemmenuItem5; privateSystem.Windows.Forms.MenuItemmenuItem6; privateSystem.Windows.Forms.PictureBoxpictureBox1; privateSystem.Windows.Forms.PictureBoxpictureBox2; privateSystem.Windows.Forms.OpenFileDialogopenFileDialog1; ///<summary> ///必需的設(shè)計(jì)器變量。 ///</summary> privateSystem.ComponentModel.Containercomponents=null; publicForm1() { // //Windows窗體設(shè)計(jì)器支持所必需的 // InitializeComponent(); // //TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼 // } ///<summary> ///清理所有正在使用的資源。 ///</summary> protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); }(2)分辨率128*128privatevoidmenuItem4_Click(objectsender,System.EventArgse) { Colorc=newColor(); //把圖片框中的圖片給一個(gè)bitmap類型 Bitmapbox1=newBitmap(pictureBox1.Image); Bitmapbox2=newBitmap(pictureBox2.Image); intr,g,b,i,j,size,k1,k2,xres,yres; xres=pictureBox1.Image.Width; yres=pictureBox1.Image.Height; size=2; for(i=0;i<=xres-1;i+=size) { for(j=0;j<=yres-1;j+=size) { c=box1.GetPixel(i,j); r=c.R; g=c.G; b=c.B; Colorcc=Color.FromArgb(r,g,b);//用formargb把整形轉(zhuǎn)換成顏色值 for(k1=0;k1<=size-1;k1++) { for(k2=0;k2<=size-1;k2++) box2.SetPixel(i+k1,j+k2,cc); } } } pictureBox2.Refresh();//刷新 pictureBox2.Image=box2;//圖片賦到圖片框2中 }程序運(yùn)行結(jié)果如圖1-18所示,輸入圖像分辨率為256*256像素。圖1-18128*128分辨率1.4.2將256*256分辨率的圖像變換為64*64分辨率1.算法說明將256*256分辨率的圖像變換為128*128分辨率方法是將源圖像分成4*4的子圖像塊,然后將該4*4子圖像塊的所有像素的顏色類似于圖1-16均按F(I,j)的顏色值進(jìn)行設(shè)定,達(dá)到降低分辨率的目的。2.程序設(shè)計(jì)程序設(shè)計(jì)如下:privatevoidmenuItem5_Click(objectsender,System.EventArgse) { Colorc=newColor(); //把圖片框中的圖片給一個(gè)bitmap類型 Bitmapbox1=newBitmap(pictureBox1.Image); Bitmapbox2=newBitmap(pictureBox2.Image); intr,g,b,i,j,size,k1,k2,xres,yres; xres=pictureBox1.Image.Width; yres=pictureBox1.Image.Height; size=4; for(i=0;i<=xres-1;i+=size) { for(j=0;j<=yres-1;j+=size) { c=box1.GetPixel(i,j); r=c.R; g=c.G; b=c.B; Colorcc=Color.FromArgb(r,g,b);//用formargb把整形轉(zhuǎn)換成顏色值 for(k1=0;k1<=size-1;k1++) { for(k2=0;k2<=size-1;k2++) box2.SetPixel(i+k1,j+k2,cc); } } } pictureBox2.Refresh();//刷新 pictureBox2.Image=box2;//圖片賦到圖片框2中 } 輸入圖像分辨率為256*256像素,轉(zhuǎn)換為64*64分辨率圖像如圖1-19所示。圖1-1964*64分辨率1.4.3將256*256分辨率的圖像變換為32*32分辨率1.算法說明將256*256分辨率的圖像變換為32*32分辨率方法是將源圖像分成8*8的子圖像塊,然后將該8*8子圖像塊的所有像素的顏色類似于圖1-16均按F(I,j)的顏色值進(jìn)行設(shè)定,達(dá)到降低分辨率的目的。2.程序設(shè)計(jì)程序設(shè)計(jì)如下:分辨率:32*32privatevoidmenuItem6_Click(objectsender,System.EventArgse) { Colorc=newColor(); //把圖片框中的圖片給一個(gè)bitmap類型 Bitmapbox1=newBitmap(pictureBox1.Image); Bitmapbox2=newBitmap(pictureBox2.Image); intr,g,b,i,j,size,k1,k2,xres,yres; xres=pictureBox1.Image.Width; yres=pictureBox1.Image.Height; size=8; for(i=0;i<=xres-1;i+=size) { for(j=0;j<=yres-1;j+=size) { c=box1.GetPixel(i,j); r=c.R; g=c.G; b=c.B; Colorcc=Color.FromArgb(r,g,b);//用formargb把整形轉(zhuǎn)換成顏色值 for(k1=0;k1<=size-1;k1++) { for(k2=0;k2<=size-1;k2++) box2.SetPixel(i+k1,j+k2,cc); } } } pictureBox2.Refresh();//刷新 pictureBox2.Image=box2;//圖片賦到圖片框2中 }輸入圖像分辨率為256*256像素轉(zhuǎn)換為32*32分辨率圖像的例子如圖1-20所示. 圖1-2032*32分辨率第2章彩色圖像處理技術(shù)學(xué)習(xí)內(nèi)容與要點(diǎn):對(duì)一幅彩色圖像的各像素值進(jìn)行變換并依變換后的新像素值重新顯示,則可以實(shí)現(xiàn)不同的顯示效果。本章介紹彩色位圖圖像變換和處理的一些基本方法和技巧。主要包括:?彩色位圖圖像的顏色的獲取、分解及輸出圖像像素顏色的設(shè)定方法?彩色位圖圖像逆反、平滑、霓紅、鑲嵌等局域處理方法。2.1彩色圖像的處理基礎(chǔ)2.1.1彩色圖像的處理基礎(chǔ)1.彩色位圖圖像的顏色圖像像素的顏色是由三種基本顏色,即紅(R)、綠(G)、藍(lán)(B)有機(jī)組合而成的,稱為三基色。每種基色的可取0到255的值,因此由三基色可組合成(256*256*256)1677萬種顏色,每種顏色都有其對(duì)應(yīng)的R、G、B值。例如,常見的7種顏色及其對(duì)應(yīng)的R、G、B值如表2-1所示。表2-1常見的7種顏色及其對(duì)應(yīng)的R、G、B值顏色名R值G值B值紅25500藍(lán)00255綠02550白255255255黃2552550黑000青0255255品紅25502552.彩色圖像顏色值的獲取在使用VC#.NET系統(tǒng)處理彩色圖像時(shí),使用Bitmap類的GetPixel方法獲取圖像上指定像素的顏色值,格式為:Colorc=newColor();..c=box1.GetPixel(i,j);其中,box1表示變量名,(i,j)為取得顏色的坐標(biāo)位置。GetPixel方法將指定位置的顏色值返回一個(gè)長整形的整數(shù)。例如,求圖片框1中圖像在位置(x,y)的像素顏色值c時(shí),可寫為:Colorc=newColor();c=box1.GetPixel(i,j)3.彩色位圖顏色值分解像素顏色值c是一個(gè)長整形的數(shù)值,占4個(gè)字節(jié),最上位字節(jié)的值為“0”,其他3個(gè)下位字節(jié)依次為B、G、R,值為0~255。從c值分解出R、G、B值可直接使用:Colorc=newColor();c=box1.GetPixel(i,j)r=c.Rg=c.Gb=c.B4.彩色圖像的RGB和亮度、色差信號(hào)間值的關(guān)系彩色圖像的R、G、B值和亮度、色差信號(hào)值Y、I、Q之間的關(guān)系如下:y0.310.590.11RI=0.60-0.28-0.32GQ0.21-0.52-0.31B這樣,亮度y為y=0.31*R+0.59*G+0.11*B圖像像素顏色的設(shè)定設(shè)置像素使用SetPixel方法。用法如下: Colorc1=Color.FromArgb(rr,gg,bb);//用formargb把整形轉(zhuǎn)換成顏色值 box2.SetPixel(i+k1,j+k2,c1);2.1.2彩色圖像生成單色灰度圖像這里我們舉例說明如何將彩色圖像生成單色灰度圖像。彩色圖像生成單色灰度圖像項(xiàng)目的界面設(shè)計(jì)如圖2-1所示。圖2-1彩色圖像生成單色灰度圖像的界面彩色圖像變?yōu)閱紊叶葓D像項(xiàng)目的公共程序如下:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespaceWindowsApplication1{ ///<summary> ///Form1的摘要說明。 ///</summary> publicclassForm1:System.Windows.Forms.Form { privateSystem.Windows.Forms.PictureBoxpictureBox1; privateSystem.Windows.Forms.Buttonbutton1; privateSystem.Windows.Forms.PictureBoxpictureBox2; privateSystem.Windows.Forms.Buttonbutton2; privateSystem.Windows.Forms.Buttonbutton3; privateSystem.Windows.Forms.Buttonbutton4; privateSystem.Windows.Forms.Buttonbutton5; privateSystem.Windows.Forms.Labellabel1; privateSystem.Windows.Forms.Labellabel2; privateSystem.Windows.Forms.Buttonbutton6; privateSystem.Windows.Forms.Buttonbutton7; ///<summary> ///必需的設(shè)計(jì)器變量。 ///</summary> privateSystem.ComponentModel.Containercomponents=null; publicForm1() { // //Windows窗體設(shè)計(jì)器支持所必需的 // InitializeComponent(); // //TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼 // } ///<summary> ///清理所有正在使用的資源。 ///</summary> protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); } ///<summary> ///應(yīng)用程序的主入口點(diǎn)。. ///</summary> [STAThread] staticvoidMain() { Application.Run(newForm1()); }1.B單色(1)算法說明將彩色圖像像素的顏色值分解為三基色r,g,b。使用SetPixel方法以基色B生成圖像。程序段如下:Bitmapb=newBitmap(pictureBox1.Image);//把圖片框中的圖片給一個(gè)bitmap類型Bitmapb1=newBitmap(pictureBox2.Image); Colorc=newColor();c=b.GetPixel(i,j);Colorc1=Color.FromArgb(c.B,c.B,c.B);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1);//在圖片框2顯示單色灰度圖像(2)程序設(shè)計(jì)privatevoidbutton1_Click(objectsender,System.EventArgse) { Bitmapb=newBitmap(pictureBox1.Image);//把圖片框中的圖片給一個(gè)bitmap類型 Bitmapb1=newBitmap(pictureBox2.Image); Colorc=newColor(); Graphicsg1=pictureBox1.CreateGraphics();//容器設(shè)為圖片框1 for(inti=0;i<pictureBox1.Width;i++) { for(intj=0;j<pictureBox1.Height;j++) { c=b.GetPixel(i,j);Colorc1=Color.FromArgb(c.B,c.B,c.B);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1); } pictureBox2.Refresh();//刷新 pictureBox2.Image=b1;//圖片賦到圖片框2中 } }(3)運(yùn)行結(jié)果運(yùn)行結(jié)果如圖2-3所示。圖2-3B單色圖像2.R單色(1)算法說明將彩色圖像像素的顏色值分解為三基色r,g,b。使用SetPixel方法以基色R生成圖像。程序段如下:c=b.GetPixel(i,j);//用formargb把整形轉(zhuǎn)換成顏色值 Colorc1=Color.FromArgb(255-c.B,255-c.B,255-c.B); b1.SetPixel(i,j,c1);(2)程序設(shè)計(jì)privatevoidbutton2_Click(objectsender,System.EventArgse) {Colorc=newColor(); Bitmapb=newBitmap(pictureBox1.Image);//把圖片框中的圖片給一個(gè)bitmap類型 Bitmapb1=newBitmap(pictureBox2.Image); for(inti=0;i<pictureBox1.Width;i++) { for(intj=0;j<pictureBox1.Height;j++) { c=b.GetPixel(i,j); //用formargb把整形轉(zhuǎn)換成顏色值 Colorc1=Color.FromArgb(255-c.B,255-c.B,255-c.B); b1.SetPixel(i,j,c1); } pictureBox2.Refresh();//刷新 pictureBox2.Image=b1;//圖片賦到圖片框2中 } }(3)運(yùn)行結(jié)果程序運(yùn)行結(jié)果如圖2-4所示。圖2-4R單色圖像3.G單色(1)算法說明將彩色圖像像素的顏色值分解為三基色r,g,b。使用SetPixel方法以基色R生成圖像。程序段如下:c=b.GetPixel(i,j); Colorc1=Color.FromArgb(c.R,c.R,c.R);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1);(2)程序設(shè)計(jì)程序設(shè)計(jì)如下privatevoidbutton3_Click(objectsender,System.EventArgse) { Colorc=newColor(); Bitmapb=newBitmap(pictureBox1.Image);//把圖片框中的圖片給一個(gè)bitmap類型 Bitmapb1=newBitmap(pictureBox2.Image); for(inti=0;i<pictureBox1.Width;i++) { for(intj=0;j<pictureBox1.Height;j++) { c=b.GetPixel(i,j); Colorc1=Color.FromArgb(c.R,c.R,c.R);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1); } pictureBox2.Refresh();//刷新 pictureBox2.Image=b1;//圖片賦到圖片框2中 } }(3)運(yùn)行結(jié)果運(yùn)行結(jié)果如圖2-5所示。圖2-5G單色圖像2.亮度圖像(1)算法利用彩色圖像的R、G、B值生成Y亮度單色圖像的方法如下:c=b.GetPixel(i,j); rr=c.B; gg=c.G; bb=c.B; cc=(int)(0.31*rr+0.59*gg+0.11*bb); if(cc<0)cc=0; if(cc>255)cc=255; Colorc1=Color.FromArgb(cc,cc,cc);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1);(2)程序設(shè)計(jì)生成Y亮度單色圖像程序如下:privatevoidbutton7_Click(objectsender,System.EventArgse) { Colorc=newColor(); Bitmapb=newBitmap(pictureBox1.Image);//把圖片框中的圖片給一個(gè)bitmap類型 Bitmapb1=newBitmap(pictureBox2.Image); intrr,gg,bb,cc; for(inti=0;i<pictureBox1.Width;i++) { for(intj=0;j<pictureBox1.Height;j++) { c=b.GetPixel(i,j); rr=c.B; gg=c.G; bb=c.B; cc=(int)(0.31*rr+0.59*gg+0.11*bb); if(cc<0)cc=0; if(cc>255)cc=255; Colorc1=Color.FromArgb(cc,cc,cc);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1); } pictureBox2.Refresh();//刷新 pictureBox2.Image=b1;//圖片賦到圖片框2中 } }(3)運(yùn)行結(jié)果生成Y亮度單色灰度圖像程序運(yùn)行結(jié)果如圖2-6所示。 圖2-6Y亮度單色圖像5.平均算法(1)算法說明將彩色圖像像素的顏色值分解為三基色r、g、b,求其和的平均值,然后使用SetPixel方法以該平均值參數(shù)生成圖像。程序段如下:c=b.GetPixel(i,j); r=c.B; g=c.G; b=c.B; cc=(int)((r+g+b)/3); if(cc<0)cc=0; if(cc>255)cc=255; Colorc1=Color.FromArgb(cc,cc,cc);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1);(2)程序設(shè)計(jì)彩色圖像生成灰度圖像程序如下:privatevoidbutton5_Click(objectsender,System.EventArgse) { Colorc=newColor(); Bitmapb=newBitmap(pictureBox1.Image);//把圖片框中的圖片給一個(gè)bitmap類型 Bitmapb1=newBitmap(pictureBox2.Image); intrr,gg,bb,cc; for(inti=0;i<pictureBox1.Width;i++) { for(intj=0;j<pictureBox1.Height;j++) { c=b.GetPixel(i,j); rr=c.B; gg=c.G; bb=c.B; cc=(int)((rr+gg+bb)/3); if(cc<0)cc=0; if(cc>255)cc=255; Colorc1=Color.FromArgb(cc,cc,cc);//用formargb把整形轉(zhuǎn)換成顏色值 b1.SetPixel(i,j,c1); } pictureBox2.Refresh();//刷新 pictureBox2.Image=b1;//圖片賦到圖片框2中 } }(3)運(yùn)行結(jié)果彩色圖像生成灰度圖像程序運(yùn)行結(jié)果如圖2-7所示。 圖2-7灰度圖像2.2彩色圖像變換彩色位圖圖像的變換包括逆反處理、平滑處理、霓紅處理、銳化處理等,本節(jié)結(jié)合實(shí)例進(jìn)行說明。彩色圖像生成單色灰度圖像項(xiàng)目的界面設(shè)計(jì)如圖2-8所示。圖2-8界面設(shè)計(jì)彩色位圖圖像的變換項(xiàng)目的公共代碼如下:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespace彩圖處理{ ///<summary> ///Form1的摘要說明。 ///</summary> publicclassForm1:System.Windows.Forms.Form { privateSystem.Windows.Forms.PictureBoxpictureBox1; privateSystem.Windows.Forms.PictureBoxpictureBox2; privateSystem.Windows.Forms.Buttonbutton1; privateSystem.Windows.Forms.Buttonbutton2; privateSystem.Windows.Forms.Buttonbutton3; privateSystem.Windows.Forms.Buttonbutton4; privateSystem.Windows.Forms.Buttonbutton5; privateSystem.Windows.Forms.Buttonbutton6; privateSystem.Windows.Forms.Buttonbutton7; privateSystem.Windows.Forms.Buttonbutton8; ///<summary> ///必需的設(shè)計(jì)器變量。 ///</summary> privateSystem.ComponentModel.Containercomponents=null; publicForm1() { // //Windows窗體設(shè)計(jì)器支持所必需的 // InitializeComponent(); // //TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼 // } ///<summary> ///清理所有正在使用的資源。 ///</summary> protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); } ///<summary> ///應(yīng)用程序的主入口點(diǎn)。 ///</summary> [STAThread] staticvoidMain() { Application.Run(newForm1()); }2.2.1逆反處理1.算法說明逆反處理的算法如下:設(shè)r.g,b分別為源圖像像素f(i,j)的紅、綠、藍(lán)分量值,rr,gg,bb分別為處理后像素g(i,j)的紅、綠、藍(lán)分量值。則rr=255-rgg=255-gbb=255-b2.程序設(shè)計(jì)逆反處理的參考程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)導(dǎo)師制師帶徒培養(yǎng)合同
- 2025年度人合作合伙合同:清潔能源項(xiàng)目投資合作框架
- 2025年度醫(yī)療護(hù)理勞務(wù)合同患者安全與權(quán)益保障合同
- 2025年度倉儲(chǔ)物流轉(zhuǎn)租服務(wù)合同
- 2025年度店面轉(zhuǎn)讓定金支付及品牌戰(zhàn)略合作協(xié)議
- 2025年度倉儲(chǔ)設(shè)施使用權(quán)及倉儲(chǔ)倉儲(chǔ)服務(wù)協(xié)議
- 2025年杭州醫(yī)學(xué)院單招職業(yè)適應(yīng)性測試題庫完整版
- 2025年度個(gè)人短期租房合同月付與租戶退租流程管理協(xié)議
- 2025年度合伙投資開中式餐廳合作協(xié)議
- 2025年度互聯(lián)網(wǎng)企業(yè)產(chǎn)品經(jīng)理崗位聘用合同
- 現(xiàn)場施工環(huán)境保護(hù)應(yīng)急預(yù)案
- 危險(xiǎn)廢物綜合利用與處置技術(shù)規(guī)范 通則
- 植物組織培養(yǎng)技術(shù)應(yīng)用研究進(jìn)展
- 教育心理學(xué)課件(完整版)
- YYT 1898-2024 血管內(nèi)導(dǎo)管導(dǎo)絲 親水性涂層牢固度試驗(yàn)方法
- 2023年安徽電氣工程職業(yè)技術(shù)學(xué)院單招職業(yè)技能試題及答案解析
- JIS-D1601-1995-汽車零部件振動(dòng)試驗(yàn)方法
- 高血壓腎病護(hù)理查房課件
- 基坑開挖影響周邊環(huán)境與建筑物研究
- 《民事訴訟法》課件
- 環(huán)保合規(guī)與企業(yè)風(fēng)險(xiǎn)管理
評(píng)論
0/150
提交評(píng)論