public static void PrintMatrix(string name, YCrCb[,] matrix) { Console.WriteLine(name + " Y "); for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { Console.Write((matrix[i, j].Y).ToString().PadLeft(6, ' ')); } Console.WriteLine(); } Console.WriteLine(); //Console.WriteLine(name + " Cr "); //for (int i = 0; i < matrix.GetLength(0); i++) //{ // for (int j = 0; j < matrix.GetLength(1); j++) // { // Console.Write((matrix[i, j].Cr).ToString().PadLeft(10, ' ')); // } // Console.WriteLine(); //} //Console.WriteLine(); //Console.WriteLine(name + " Cb "); //for (int i = 0; i < matrix.GetLength(0); i++) //{ // for (int j = 0; j < matrix.GetLength(1); j++) // { // Console.Write((matrix[i, j].Cb).ToString().PadLeft(10, ' ')); // } // Console.WriteLine(); //} //Console.WriteLine(); }
public void Supersample(YCrCb[,] matrix) { for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { matrix[i, j].Y += 128; matrix[i, j].Cr += 128; matrix[i, j].Cb += 128; } } }
public void CalculateIDCT(YCrCb[,] matrix) { int width = matrix.GetLength(0); int height = matrix.GetLength(1); for (int x = 0; x < width; x = x + BlockSize) { for (int y = 0; y < height; y = y + BlockSize) { calculateIDCTForBlock(matrix, x, y); } } }
private int bitsPerNonZeroDCTCoefficient(YCrCb[,] matrix) { int count = 0; for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { if (matrix[i, j].Y != 0 && matrix[i, j].Y != 1) { count++; } } } return count; }
public List<Point> Permutation(YCrCb[,] matrix) { var points = new List<Point>(); for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { if (matrix[i, j].Y != 0 && matrix[i, j].Y != 1) { points.Add(new Point(i, j)); } } } return points; }
public static RGB[,] Parse(YCrCb[,] yCrCb) { int m = yCrCb.GetLength(0); int n = yCrCb.GetLength(1); var matrix = new RGB[m, n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { matrix[i, j] = Parse(yCrCb[i, j]); } } return matrix; }
public void ApplyQuantization(YCrCb[,] matrix, int qualityFactor) { int i, j, k, l; int[,] qualityLuminanceMatrix = generateQualityFactorLuminanceMatrix(qualityFactor); int[,] qualityChrominanceMatrix = generateQualityFactorChrominanceMatrix(qualityFactor); for (i = 0; i < matrix.GetLength(0); i++) { k = i % 8; for (j = 0; j < matrix.GetLength(1); j++) { l = j % 8; matrix[i, j].Y = Math.Round(matrix[i, j].Y / qualityLuminanceMatrix[k, l]); matrix[i, j].Cr = Math.Round(matrix[i, j].Cr / qualityChrominanceMatrix[k, l]); matrix[i, j].Cb = Math.Round(matrix[i, j].Cb / qualityChrominanceMatrix[k, l]); } } }