/// <summary> /// 粗糙式缩放图像 /// Method - BitmapData /// Range >= 1 /// </summary> private void ZoomPic(Bitmap pic,int _zoomsize) { if (pic == null) return; if (_zoomsize <1) return; Bitmap tmpBMP = new Bitmap(pic.Width, pic.Height, PixelFormat.Format24bppRgb); tmpBMP = pic; int lw=tmpBMP.Width,lh=tmpBMP.Height; Bitmap newBMP = new Bitmap(lw * _zoomsize, lh * _zoomsize, PixelFormat.Format24bppRgb); BitmapData data = tmpBMP.LockBits(new Rectangle(0, 0, lw, lh), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); BitmapData newdata=newBMP.LockBits(new Rectangle(0,0,lw*_zoomsize,lh*_zoomsize),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb); int Offset=data.Stride-data.Width*3; int newOffset = newdata.Stride - newdata.Width * 3; unsafe { byte* pIn = (byte*)data.Scan0; byte* pOut = (byte*)newdata.Scan0; for (int i = 0; i < data.Height; i++) { for (int j = 0; j < data.Width; j++) { for (int iz = 0; iz < _zoomsize; iz++) { for (int jz = 0; jz < _zoomsize; jz++) { pOut[0] = pIn[0]; pOut[1] = pIn[1]; pOut[2] = pIn[2]; pOut += 3; } pOut -= 3 * _zoomsize;//初始化偏移 pOut += newdata.Stride; } pOut -= newdata.Stride * _zoomsize; //初始化偏移 pOut += 3 * _zoomsize; pIn += 3; } pIn += Offset; pOut += newOffset; pOut += newdata.Stride * (_zoomsize -1); } } tmpBMP.UnlockBits(data); newBMP.UnlockBits(newdata); ZoomPicBox.Image=newBMP; } 类似mspaint的缩放 可配合pictrueBox(AutoSize) + panel(AutoScroll) 安全代码则用GetPixel()与SetPixel() 但效率非常低