⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ut.cs

📁 实现微软OFFICEACCESE数据库自动备份功能
💻 CS
字号:
using System;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace gowk.multimedia
{
	/// <summary>
	/// UT 的摘要说明。
	/// </summary>
	public class UT
	{
		public UT()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}
		/////////////////////////////////////////////////////////////////////////

		// LowPassWave

		//

		// 低通滤波

		//

		// 参数:Format —— 波形音频格式结构WAVEFORMATEX

		//      lpData —— 波形音频数据块指针

		//      dwDataLength —— 波形音频数据块大小

		//      fFrequencyPass —— 滤波频率阈值

		//

		// 无返回值

		/////////////////////////////////////////////////////////////////////////

		unsafe 	public static void LowPassWave(WAVEFORMATEX Format, byte[] data,             

			int dwDataLength, float fFrequencyPass)

		{

			fixed(byte* lpData=data)
			{
				float fParam0,fParam1,fParam2;

				int   nSamplesPerSec = Format.nSamplesPerSec;

 

				fParam0=(1.0f/nSamplesPerSec)/(2.0f/fFrequencyPass+

					1.0f/nSamplesPerSec);

				fParam1=fParam0;

				fParam2=(1.0f/nSamplesPerSec-2.0f/fFrequencyPass)/

					(2.0f/fFrequencyPass+1.0f/nSamplesPerSec);

 

				PassWave(Format, lpData, dwDataLength, fFrequencyPass, 

					fParam0, fParam1, fParam2);
			}

		}

 

		/////////////////////////////////////////////////////////////////////////

		// HighPassWave

		//

		// 高通滤波

		//

		// 参数:Format —— 波形音频格式结构WAVEFORMATEX

		//      lpData —— 波形音频数据块指针

		//      dwDataLength —— 波形音频数据块大小

		//      fFrequencyPass —— 滤波频率阈值

		//

		// 无返回值

		/////////////////////////////////////////////////////////////////////////

		unsafe public static void HighPassWave(WAVEFORMATEX Format,byte[] data,

			int dwDataLength, float fFrequencyPass)

		{


			fixed(byte* lpData=data)
			{
				float fParam0,fParam1,fParam2;

				int   nSamplesPerSec = Format.nSamplesPerSec;

 

				fParam0=(20.0f/fFrequencyPass+1.0f/nSamplesPerSec)/

					(2.0f/fFrequencyPass+1.0f/nSamplesPerSec);

				fParam1=(-20.0f/fFrequencyPass+1.0f/nSamplesPerSec)/

					(2.0f/fFrequencyPass+1.0f/nSamplesPerSec);

				fParam2=(1.0f/nSamplesPerSec-2.0f/fFrequencyPass)/

					(2.0f/fFrequencyPass+1.0f/nSamplesPerSec);

 

				PassWave(Format, lpData, dwDataLength, fFrequencyPass, 

					fParam0, fParam1, fParam2);
			}

		}
		/////////////////////////////////////////////////////////////////////////

		// PassWave

		//

		// 滤波算法

		//

		// 参数:Format —— 波形音频格式结构WAVEFORMATEX

		//      lpData —— 波形音频数据块指针

		//      dwDataLength —— 波形音频数据块大小

		//      fFrequencyPass —— 滤波频率阈值

		//      fParam0, fParam1, fParam2 —— 滤波参数

		//

		// 无返回值

		/////////////////////////////////////////////////////////////////////////

		unsafe private static void PassWave(WAVEFORMATEX Format, byte* lpData, 

			int dwDataLength, float fFrequencyPass,

			float fParam0,float fParam1, float fParam2)

		{

			float fXL0,fXL1,fYL1,fYL0;

			float fXR0,fXR1,fYR1,fYR0;

			int i;

 

			switch(Format.wBitsPerSample)

			{

				case 8:

				switch(Format.nChannels)

				{

					case 1:

						fXL0=(float)*(byte *)lpData;

						fXL1=fXL0;

						fYL1=fXL0;

						for(i=0;i<dwDataLength;i+=sizeof(byte))

						{

							fXL0=(float)*(byte *)(lpData+i);

							fYL0=fParam0*fXL0+fParam1*fXL1-

								fParam2*fYL1;

							*(byte *)(lpData+i)=(byte)fYL0;

							fXL1=fXL0;

							fYL1=fYL0;

						}

						break;

					case 2:

						fXL0=(float)*(byte *)lpData;

						fXL1=fXL0;

						fYL1=fXL0;

						fXR0=(float)*(byte *)(lpData+sizeof(byte));

						fXR1=fXR0;

						fYR1=fXR0;

						for(i=0;i<dwDataLength;i+=2*sizeof(byte))

						{

							fXL0=(float)*(byte *)(lpData+i);

							fYL0=fParam0*fXL0+fParam1*fXL1-

								fParam2*fYL1;

							*(byte *)(lpData+i)=(byte)fYL0;

							fXL1=fXL0;

							fYL1=fYL0;

							fXR0=(float)*(byte *)(lpData+i+sizeof(byte));

							fYR0=fParam0*fXR0+fParam1*fXR1-

								fParam2*fYR1;

							*(byte *)(lpData+i+sizeof(byte))=(byte)fYR0;

							fXR1=fXR0;

							fYR1=fYR0;

						}

						break;

				}

					break;

				case 16:

				switch(Format.nChannels)

				{

					case 1:

						fXL0=(float)*(short *)lpData;

						fXL1=fXL0;

						fYL1=fXL0;

						for(i=0;i<dwDataLength;i+=2)

						{

							fXL0=(float)*(short *)(lpData+i);

							fYL0=fParam0*fXL0+fParam1*fXL1-

								fParam2*fYL1;

							*(short *)(lpData+i)=(short)fYL0;

							fXL1=fXL0;

							fYL1=fYL0;

						}

						break;

					case 2:

						fXL0=(float)*(short *)lpData;

						fXL1=fXL0;

						fYL1=fXL0;

						fXR0=(float)*(short *)(lpData+sizeof(short));

						fXR1=fXR0;

						fYR1=fXR0;

						for(i=0;i<dwDataLength;i+=2*sizeof(short))

						{

							fXL0=(float)*(short *)(lpData+i);

							fYL0=fParam0*fXL0+fParam1*fXL1-

								fParam2*fYL1;

							*(short *)(lpData+i)=(short)fYL0;

							fXL1=fXL0;

							fYL1=fYL0;

							fXR0=(float)*(short *)(lpData+

								i+sizeof(short));

							fYR0=fParam0*fXR0+fParam1*fXR1-

								fParam2*fYR1;

							*(short *)(lpData+i+sizeof(short))=

								(short)fYR0;

							fXR1=fXR0;

							fYR1=fYR0;

						}

						break;

				}

					break;

			}

		}
		#region
		/********************************************************************* 

		 * 

		 * ChangeDIBSize() 

		 * 

		 * 参数: 

		 * 

		 * HDIB hDIB —— 将缩放的DIB的句柄

		 * int nWidth,int nHeight ——  新DIB的宽度和高度

		 * 

		 * 返回值: 

		 * 

		 * HDI —— 新DIB 的句柄

		 * 

		 * 说明: 

		 * 

		 * 本函数对DIB进行缩放,并生成一个新的DIB, 源DIB保持不变。

		 * 

		 *********************************************************************/ 
       
        /*
        
			HDIB ChangeDIBSize(HDIB hDIB,int nWidth,int nHeight)

			{

				LPBITMAPINFO  lpbmi = NULL; 

				LPBYTE  lpSourceBits,lpTargetBits,lpResult; 

				HDC hDC = NULL,hSourceDC,hTargetDC; 

				HBITMAP hSourceBitmap,hTargetBitmap,hOldTargetBitmap,

					hOldSourceBitmap; 

				DWORD   dwSourceBitsSize,dwTargetBitsSize,dwTargetHeaderSize; 

				HDIB    hNewDIB;

				DWORD   dwSize;

 

				//WaitCursorBegin();

 

				// Get DIB pointer

				if (!hDIB)

				{

					//WaitCursorEnd();

					return NULL;

				}

				LPBITMAPINFO lpSrcDIB = (LPBITMAPINFO)GlobalLock(hDIB);

				if (!lpSrcDIB)

				{

					//WaitCursorEnd();

					return NULL;

				}

 

				// Allocate and fill out a BITMAPINFO struct for the new DIB 

				dwTargetHeaderSize = sizeof( BITMAPINFOHEADER ) + 

					PaletteSize(lpSrcDIB); 

				lpbmi = (LPBITMAPINFO)malloc( dwTargetHeaderSize ); 

				memcpy(lpbmi,lpSrcDIB,dwTargetHeaderSize);

				lpbmi->bmiHeader.biWidth = nWidth; 

				lpbmi->bmiHeader.biHeight = nHeight; 

 

				// Gonna use DIBSections and BitBlt() to do the conversion,so make 'em 

				hDC = GetDC( NULL ); 

				hTargetBitmap = CreateDIBSection( hDC,lpbmi,

					DIB_RGB_COLORS,(VOID **)&lpTargetBits,NULL,0 ); 

				hSourceBitmap = CreateDIBSection( hDC,lpSrcDIB,

					DIB_RGB_COLORS,(VOID **)&lpSourceBits,NULL,0 ); 

				hSourceDC = CreateCompatibleDC( hDC ); 

				hTargetDC = CreateCompatibleDC( hDC ); 

 

				// Flip the bits on the source DIBSection to match the source DIB 

				dwSourceBitsSize = lpSrcDIB->bmiHeader.biHeight * 

					BytesPerLine((LPBYTE)&(lpSrcDIB->bmiHeader)); 

				dwTargetBitsSize = lpbmi->bmiHeader.biHeight * 

					BytesPerLine((LPBYTE)&(lpbmi->bmiHeader)); 

				memcpy( lpSourceBits,FindDIBBits((LPBYTE)lpSrcDIB),dwSourceBitsSize ); 

				lpbmi->bmiHeader.biSizeImage = dwTargetBitsSize; 

 

				// Select DIBSections into DCs 

				hOldSourceBitmap = (HBITMAP)SelectObject( hSourceDC,hSourceBitmap ); 

				hOldTargetBitmap = (HBITMAP)SelectObject( hTargetDC,hTargetBitmap ); 

 

				// put old bitmap in new bitmap 

				SetStretchBltMode( hTargetDC,COLORONCOLOR ); 

				StretchBlt( hTargetDC,0,0,

					lpbmi->bmiHeader.biWidth,lpbmi->bmiHeader.biHeight,

					hSourceDC,0,0,

					lpSrcDIB->bmiHeader.biWidth,lpSrcDIB->bmiHeader.biHeight,

					SRCCOPY ); 

 

				// Clean up and delete the DCs 

				SelectObject( hSourceDC,hOldSourceBitmap ); 

				SelectObject( hTargetDC,hOldTargetBitmap ); 

				DeleteDC( hSourceDC ); 

				DeleteDC( hTargetDC ); 

				ReleaseDC( NULL,hDC ); 

 

				// Flush the GDI batch,so we can play with the bits 

				GdiFlush(); 

 

				// Allocate enough memory for the new CF_DIB,and copy bits 

				dwSize = dwTargetHeaderSize + dwTargetBitsSize;

				hNewDIB = GlobalAlloc(GHND,dwSize);

				lpResult = (LPBYTE)GlobalLock(hNewDIB); 

				memcpy( lpResult,lpbmi,dwTargetHeaderSize ); 

				memcpy( FindDIBBits( (LPBYTE)lpResult ),lpTargetBits,dwTargetBitsSize ); 

 

				// final cleanup 

				DeleteObject( hTargetBitmap ); 

				DeleteObject( hSourceBitmap ); 

				free( lpbmi ); 

				GlobalUnlock(hDIB);

				GlobalUnlock(hNewDIB);

				WaitCursorEnd();

 

				return hNewDIB;

			}
	*/
		#endregion

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -