我必须在红色,绿色和蓝色平面上制作图像直方图。
我有这个代码,但它是在Visual Basic中我需要它在C# 我需要打开一个图像,然后我必须制作直方图。
Public Class Form1
Public Function histogramaAcumulado(ByVal bmp As Bitmap) As Integer(,)
'Creamos una matriz que contendrá el histograma acumulado
Dim Rojo, Verde, Azul As Byte 'Declaramos tres variables que almacenarán los colores
Dim matrizAcumulada(2, 255) As Integer
For i = 0 To bmp.Width - 1 'Recorremos la matriz
For j = 0 To bmp.Height - 1
Rojo = bmp.GetPixel(i, j).R 'Asignamos el color
Verde = bmp.GetPixel(i, j).G
Azul = bmp.GetPixel(i, j).B
'ACumulamos los valores.
matrizAcumulada(0, Rojo) += 1
matrizAcumulada(1, Verde) += 1
matrizAcumulada(2, Azul) += 1
Next
Next
Return matrizAcumulada
End Function
Dim histoAcumulado As Integer(,) 'Variable que almacenará los histogramas
Private Sub Form1_(Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Cargamos los histogramas
Dim bmp As New Bitmap(PictureBox1.Image)
histoAcumulado = histogramaAcumulado(bmp)
'Ejecutamos el botón del histograma rojo
Button1_Click(sender, e)
End Sub
'Histograma rojo
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Borramos el posible contenido del chart
Chart1.Series("Histograma").Points.Clear()
'Los ponesmos del colores correspondiente
Chart1.Series("Histograma").Color = Color.Red
For i = 0 To 255
Chart1.Series("Histograma").Points.AddXY(i + 1, histoAcumulado(0, i))
Next
End Sub
'Histograma verde
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'Borramos el posible contenido del chart
Chart1.Series("Histograma").Points.Clear()
Chart1.Series("Histograma").Color = Color.Green
For i = 0 To 255
Chart1.Series("Histograma").Points.AddXY(i + 1, histoAcumulado(1, i))
Next
End Sub
'Histograma azul
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'Borramos el posible contenido del chart
Chart1.Series("Histograma").Points.Clear()
Chart1.Series("Histograma").Color = Color.Blue
For i = 0 To 255
Chart1.Series("Histograma").Points.AddXY(i + 1, histoAcumulado(2, i))
Next
End Sub
结束班
答案 0 :(得分:0)
我在C#中需要它我需要打开一个图像,对于那个图像我必须制作直方图
如果我理解你的问题,那基本上就是将VB.NET转换为c#。原始代码已经创建了直方图,可以在histogramaAcumulado()
下面看到。
注意:通常在SO上我们更喜欢源代码是英语。我没有进行任何语言翻译。
附加说明:原始代码也会引用未定义的Chart1
成员,从而将下面的代码标记为无法编译以及原始代码。我把它留作OP的练习,以进一步探索原始的VB代码来破译它的含义。
请在下面找到c#代码:
public class Form1
{
public int[,] histogramaAcumulado(Bitmap bmp)
{
//Creamos una matriz que contendrá el histograma acumulado
byte Rojo = 0;
byte Verde = 0;
byte Azul = 0;
//Declaramos tres variables que almacenarán los colores
int[,] matrizAcumulada = new int[3, 256];
//Recorremos la matriz
for (i = 0; i <= bmp.Width - 1; i++)
{
for (j = 0; j <= bmp.Height - 1; j++)
{
Rojo = bmp.GetPixel(i, j).R;
//Asignamos el color
Verde = bmp.GetPixel(i, j).G;
Azul = bmp.GetPixel(i, j).B;
//ACumulamos los valores.
matrizAcumulada[0, Rojo] += 1;
matrizAcumulada[1, Verde] += 1;
matrizAcumulada[2, Azul] += 1;
}
}
return matrizAcumulada;
}
//Variable que almacenará los histogramas
int[,] histoAcumulado;
private void Form1_Load(object sender, EventArgs e)
{
//Cargamos los histogramas
Bitmap bmp = new Bitmap(PictureBox1.Image);
histoAcumulado = histogramaAcumulado(bmp);
//Ejecutamos el botón del histograma rojo
Button1_Click(sender, e);
}
//Histograma rojo
private void Button1_Click(object sender, EventArgs e)
{
//Borramos el posible contenido del chart
Chart1.Series("Histograma").Points.Clear();
//Los ponesmos del colores correspondiente
Chart1.Series("Histograma").Color = Color.Red;
for (i = 0; i <= 255; i++)
{
Chart1.Series("Histograma").Points.AddXY(i + 1, histoAcumulado[0, i]);
}
}
//Histograma verde
private void Button2_Click(object sender, EventArgs e)
{
//Borramos el posible contenido del chart
Chart1.Series("Histograma").Points.Clear();
Chart1.Series("Histograma").Color = Color.Green;
for (i = 0; i <= 255; i++)
{
Chart1.Series("Histograma").Points.AddXY(i + 1, histoAcumulado[1, i]);
}
}
//Histograma azul
private void Button3_Click(object sender, EventArgs e)
{
//Borramos el posible contenido del chart
Chart1.Series("Histograma").Points.Clear();
Chart1.Series("Histograma").Color = Color.Blue;
for (i = 0; i <= 255; i++)
{
Chart1.Series("Histograma").Points.AddXY(i + 1, histoAcumulado[2, i]);
}
}
public Form1()
{
Load += Form1_Load;
}
}
为了您的兴趣,代码是通过SharpDevelop Snippet Converter转换的。