vs窗体trackBar进行图片亮度调节c#代码
时间: 2023-08-01 13:11:16 浏览: 103
以下是一个简单的 Windows 窗体应用程序,可供您参考,其中包含用于实现图像亮度调节器的代码:
```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ImageBrightnessAdjustment
{
public partial class MainForm : Form
{
private Bitmap originalImage;
private Bitmap adjustedImage;
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// 加载图像
originalImage = new Bitmap("image.jpg");
pictureBox1.Image = originalImage;
// 初始化 TrackBar
trackBar1.Minimum = -100;
trackBar1.Maximum = 100;
trackBar1.TickFrequency = 10;
trackBar1.Value = 0;
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
// 计算亮度调整值
float brightness = (float)trackBar1.Value / 100.0f;
// 调整图像亮度
adjustedImage = AdjustBrightness(originalImage, brightness);
// 显示调整后的图像
pictureBox1.Image = adjustedImage;
}
private Bitmap AdjustBrightness(Bitmap image, float brightness)
{
Bitmap adjustedImage = new Bitmap(image.Width, image.Height);
// 锁定原始图像的位图数据
BitmapData originalData = image.LockBits(new Rectangle(0, 0, image.Width, image.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
// 锁定调整后的图像的位图数据
BitmapData adjustedData = adjustedImage.LockBits(new Rectangle(0, 0, adjustedImage.Width, adjustedImage.Height),
ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
// 获取每个像素的字节数
int pixelSize = 3;
// 循环遍历每个像素
unsafe
{
for (int y = 0; y < originalData.Height; y++)
{
byte* originalRow = (byte*)originalData.Scan0 + (y * originalData.Stride);
byte* adjustedRow = (byte*)adjustedData.Scan0 + (y * adjustedData.Stride);
for (int x = 0; x < originalData.Width; x++)
{
// 获取原始像素的 RGB 值
byte originalBlue = originalRow[x * pixelSize];
byte originalGreen = originalRow[x * pixelSize + 1];
byte originalRed = originalRow[x * pixelSize + 2];
// 计算调整后的像素值
byte adjustedBlue = (byte)(originalBlue * (1.0f + brightness));
byte adjustedGreen = (byte)(originalGreen * (1.0f + brightness));
byte adjustedRed = (byte)(originalRed * (1.0f + brightness));
// 将调整后的像素值写入调整后的图像
adjustedRow[x * pixelSize] = adjustedBlue;
adjustedRow[x * pixelSize + 1] = adjustedGreen;
adjustedRow[x * pixelSize + 2] = adjustedRed;
}
}
}
// 解锁位图数据
adjustedImage.UnlockBits(adjustedData);
image.UnlockBits(originalData);
return adjustedImage;
}
}
}
```
在这个例子中,我们将图像加载到名为 pictureBox1 的 PictureBox 控件中,并使用 TrackBar 控件接收用户的亮度调节值。然后,我们使用 AdjustBrightness() 方法来实现图像亮度调节的实际工作,该方法使用锁定位图数据的技术来直接访问每个像素并调整其亮度。最后,我们将调整后的图像显示在 pictureBox1 控件中。
阅读全文