65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VB.NET 实现图像裁剪和调整大小

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (41投票s)

2008年6月17日

CPOL

2分钟阅读

viewsIcon

261139

downloadIcon

15745

使用 VB.NET 实现简单的图像裁剪和调整大小

image_croppingVBNet/mainimg.jpg

引言

本文讨论了使用 VB.NET 实现简单图像裁剪和调整大小的技术,供开发人员参考。

背景

我曾经对图像裁剪感到好奇。我了解到,与目前可用的其他裁剪技术相比,有很多简单的图像裁剪技术。

Using the Code

本文讨论了使用 VB.NET 实现简单的图像裁剪。

在本文中,我将讨论如何使用常见的事件(如鼠标移动、鼠标按下、鼠标释放和按钮单击事件)进行简单的图像裁剪。

我只想讨论使用五个步骤进行图像裁剪。您只需要遵循这些步骤即可。

步骤如下:

  1. 加载图像
  2. 裁剪图像
  3. 捕获图像
  4. 调整图像大小(如果需要)
  5. 保存图像

在开始创建之前,我们需要 2 个PictureBox 控件(PreviewPictureBoxcrobPictureBox),3 个按钮(saveCancelopen),1 个TrackBar(resizingTrackBar)和一些标签。嘿,这看起来像烹饪规范。

步骤简述如下:

1. 加载图像

可以使用文件打开对话框将图像加载到PictureBox 中,并通过位图显示方法显示,即:

openDlg.ShowDialog()  
PreviewPictureBox.Image = System.Drawing.Bitmap.FromFile(openDlg.FileName)
crobPictureBox.Image = System.Drawing.Bitmap.FromFile(openDlg.FileName)    
'*********PreviewPictureBox and crobPictureBox are 
'the cropping and previewing pictureboxes  

这可以在窗体加载按钮单击事件中完成。

2. 裁剪图像

可以使用鼠标移动鼠标按下事件从PictureBox 中裁剪图像。可以通过使用上述事件获取 x 和 y 轴来实现,即:

cropX = e.X
cropY = e.Y
cropPen = New Pen(cropPenColor, cropPenSize)    
cropPen.DashStyle = DashStyle.DashDotDot          
'*************You have to create Colors(cropPenColor) 
'and Size(cropPenSize) to draw the doted lines  

您可以使用 DashStyle.DashDotDot 查看我应用的样式来指定选定的区域。还可以使用 crobPictureBox.CreateGraphics.DrawRectangle(cropPen, cropX, cropY, cropWidth, cropHeight)

3. 捕获图像

仅使用鼠标释放事件捕获图像,并将裁剪后的图像设置为 Bitmap 类,该类创建一个图像并将创建的图像设置为预览,即:

Dim bit As Bitmap = New Bitmap(crobPictureBox.Image, _
	crobPictureBox.Width, crobPictureBox.Height)
g.DrawImage(bit, 0, 0, rect, GraphicsUnit.Pixel)
PreviewPictureBox.Image = cropBitmap    

4. 调整图像大小

如果想调整图像大小,可以使用TrackBar 来调整图像大小。我建议使用高质量的图像进行调整大小,这样可以得到高质量的裁剪和调整大小后的图像。

scale_factor = Integer.Parse(resizingTrackBar.Value)         
img1.Image = cropBitmap
bm_source = New 
Bitmap(img1.Image)  bm_dest = New Bitmap( _
CInt(bm_source.Width * scale_factor), _
Int(bm_source.Height * scale_factor))   
      
Dim gr_dest As Graphics = Graphics.FromImage(bm_dest)
gr_dest.DrawImage(bm_source, 0, 0, bm_dest.Width + i, bm_dest.Height + i)
PreviewPictureBox.Image = bm_dest
'*************Image resizing is done by means of getting the values from trackbar  

5. 保存图像

裁剪后的图像质量可能较低,导致图像失真。我尽力使图像具有良好的质量。我使用了 SmoothingModeCompositingQualityInterpolationMode EncoderParameter(myEncoder, 60L) 属性来制作图像。

关注点

在上述步骤和编码方法中,您会发现简单性。这就是我的意思。所有编码人员都应该以**优化方式使用简单的技术**来解决复杂的问题。

历史

  • 2008 年 6 月 17 日:初始发布
© . All rights reserved.