图像相关(二)
来源:互联网 发布:php获取get数据 编辑:程序博客网 时间:2024/06/15 16:11
//缩放图像 private void ScaleBitmap(string imgUrl) { //源图像 System.Drawing.Bitmap oldBmp = new System.Drawing.Bitmap(imgUrl); //新图像,并设置新图像的宽高 System.Drawing.Bitmap newBmp = new System.Drawing.Bitmap(100, 100); Graphics draw = Graphics.FromImage(newBmp);//从新图像获取对应的Graphics System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, 50, 50);//指定绘制新图像的位置和大小 draw.DrawImage(oldBmp, rect);//把源图像的全部完整的内容,绘制到新图像rect这个区域内,这不就实现缩放了么 draw.Dispose(); oldBmp.Dispose();//一定要把源图Dispose调,因为保存的是相同路径,需要把之前的图顶替调,如果不释放的话会报错:(GDI+ 中发生一般性错误。) newBmp.Save(imgUrl);//保存替换到同一个路径 }
//裁剪图像 private void CutBitmap(string imgUrl) { System.Drawing.Bitmap oldBmp = new System.Drawing.Bitmap(imgUrl); //新图像,并设置宽高 System.Drawing.Bitmap newBmp = new System.Drawing.Bitmap(100, 100); Graphics draw = Graphics.FromImage(newBmp); draw.DrawImage(oldBmp, 50, 50);//指定目标图像从(x,y)坐标开始绘制 draw.Dispose(); oldBmp.Dispose();//一定要把源图Dispose调,因为保存的是相同路径,需要把之前的图顶替调,如果不释放的话会报错:(GDI+ 中发生一般性错误。) newBmp.Save(imgUrl); }
Bitmap转换为byte[]
public static byte[] BitmapToBytes(Bitmap bitmap) { MemoryStream ms = new MemoryStream(); bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] buffer = ms.ToArray(); ms.Close(); ms.Dispose(); return buffer; }
byte[]转换为Bitmap
public static Bitmap BytesToBitmap(byte[] buffer) { MemoryStream ms = new MemoryStream(buffer); Bitmap bmp = new Bitmap(ms); ms.Close(); return bmp; }
Graphics.DrawImage 方法理解
private void btnTest_Click(object sender, RoutedEventArgs e) { string imgUrl = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "RemotePhoto"); //imgUrl += @"\IMG_0005.JPG"; imgUrl += @"\1.jpg"; System.Drawing.Image srcImg = System.Drawing.Image.FromFile(imgUrl);//源图像 Bitmap newBmp = new Bitmap(500,500); Graphics draw = Graphics.FromImage(newBmp); draw.FillRectangle(System.Drawing.Brushes.Black, 0, 0, newBmp.Width, newBmp.Height);//绘制一层黑底 //由坐标指定的位置,绘制图像的原始物理大小,如果新图的宽高小于原始图像,则仅显示新图这么大区域的图像,多余的区域不显示,相当于被裁剪掉了(裁剪) //draw.DrawImage(srcImg, 0, 0); //draw.DrawImage(srcImg,new System.Drawing.Point(0,0)); //draw.DrawImage(srcImg,new PointF(0.5f,0.5f)); //指定位置并且指定大小,源图像会缩放或者拉伸到指定大小(缩放) //image 要绘制的图像 //x,y 所绘制图像的x,y //width 所绘制图像的宽 //height 所绘制图像的高 //注意理解“要绘制”和“所绘制”的区别 //public void DrawImage(Image image,int x,int y,int width,int height) //draw.DrawImage(srcImg, 0, 0, newBmp.Width, newBmp.Height); //(缩放) //image 要绘制的 Image。 //rect 指定所绘制图像的位置和大小。(就是destRect) //public void DrawImage(Image image,Rectangle rect) draw.DrawImage(srcImg, new Rectangle(0,0,newBmp.Width,newBmp.Height)); //指定想要绘制源图像的区域,则仅绘制这个区域,其他区域不绘制(裁剪) //image 要绘制的 Image。 //x,y 所绘制图像的左上角的 x 坐标。所绘制图像的左上角的 y 坐标。 //srcRect 它指定 image 对象中要绘制的部分。 //srcUnit度量单位 //注意理解“要绘制”和“所绘制”的区别 //public void DrawImage(Image image,int x,int y,Rectangle srcRect,GraphicsUnit srcUnit) //Rectangle srcRect = new Rectangle(10,10,100,100); //draw.DrawImage(srcImg, 0, 0, srcRect, GraphicsUnit.Pixel); //绘制平行四边形,指定绘制的三个点,第四个点会自动计算出来的(裁剪) //System.Drawing.Point leftUpCorner = new System.Drawing.Point(10, 10);//左上角 //System.Drawing.Point rightUpCorner = new System.Drawing.Point(200, 10);//右上角 //System.Drawing.Point leftBottomCorner = new System.Drawing.Point(50, 100);//左下角 //System.Drawing.Point[] destPara = { leftUpCorner, rightUpCorner, leftBottomCorner }; //draw.DrawImage(srcImg, destPara); //根据上面的例子,以下方法的使用就不一一举例了 //指定源图像的绘制区域,并指定一个四边形 //destPoints定义一个四变形 //srcRect定义绘制源图的区域 //srcUnit度量单位 //public void DrawImage(Image image,Point[] destPoints,Rectangle srcRect,GraphicsUnit srcUnit) //(缩放) //destRect目标区域 //srcX 指定源图坐标x //srcY 指定源图u坐标y //srcWidth 指定源图宽 //srcHeight 指定源图高 //srcUnit度量单位 //public void DrawImage(Image image,Rectangle destRect,int srcX,int srcY,int srcWidth,int srcHeight,GraphicsUnit srcUnit) //Rectangle destRect = new Rectangle(0, 0, newBmp.Width, newBmp.Height); //draw.DrawImage(srcImg, destRect, 0, 0, srcImg.Width, srcImg.Height, GraphicsUnit.Pixel); //(缩放) //destRect目标区域 //srcRect 源区域 //public void DrawImage(Image image,Rectangle destRect,Rectangle srcRect,GraphicsUnit srcUnit) //Rectangle destRect = new Rectangle(0,0,newBmp.Width,newBmp.Height); //Rectangle srcRect = new Rectangle(0,0,srcImg.Width,srcImg.Height); //draw.DrawImage(srcImg, destRect, srcRect, GraphicsUnit.Pixel); //总结 //理解“要绘制”和“所绘制”的区别 //理解"裁剪"和"缩放"的区别 BitmapImage bmpImg = BitmapToBitmapImage(newBmp); imgPic.Source = bmpImg; }
阅读全文
0 0
- 图像相关(二)
- Halcon学习(二)图像获取与相关参数
- 图像增强(二)
- 图像变形(二)
- 图像处理(二)
- 图像编码(二)
- Halcon学习之二:摄像头获取图像和相关参数
- Halcon学习之二:摄像头获取图像和相关参数
- Halcon学习之二:摄像头获取图像和相关参数
- 【OpenCV】图像处理(二)图像形态学
- 图像处理(二):图像滤波
- 图像相关
- TensorFlow 图像预处理(二) 图像翻转,图像色彩调整
- MFC相关(二)
- SpringDataJpa相关(二)
- 矩阵与图像(二)
- 图像处理基础(二)
- tensorflow 图像数据处理(二)
- 总结今天的工作
- jquery.gridly.js
- 1017(二分+树状数组)
- 控制并发数量
- lintcode:将整数A转换为B
- 图像相关(二)
- javascript中的with
- 移动端Jenkins持续集成攻略(1)
- 前缀中的周期
- 求知过程之oracle初级积累一
- std::string::assign 崩溃的问题
- C语言笔记——指针04
- POJ 3080 Blue Jeans(暴力模拟+stl)
- CSS3&HTML5各浏览器支持情况一览表