/// <summary> /// Translate pixel from one picture to other. /// </summary> /// <param name="Source">Main Image</param> /// <param name="Common">New Image</param> /// <param name="SoureRef">Point in main image</param> /// <param name="CommonRef">Same point in new image(It should be in different location, but is not necessary)</param> /// <param name="first">True for first bmp. False if image is second bmp.</param> private void TranslatePixel(Bitmap Source, Bitmap Common, Point3D SoureRef, Point3D CommonRef, bool first) { LockBitmap SourceLock = new LockBitmap(Source); LockBitmap CommonLock = new LockBitmap(Common); SourceLock.LockBits(); CommonLock.LockBits(); int width; int start; if (first) { int index; if (LeftCase) { index = CropSecondBmpPoint(FirstPoints); start = (int)FirstPoints[index].X + 1; width = SourceLock.Width; } else { index = CropFirstBmpPoint(FirstPoints); width = (int)FirstPoints[index].X + 1; start = 0; } } else { width = SourceLock.Width; start = 0; } int xDiff = (int)(SoureRef.X - CommonRef.X); int yDiff = (int)(SoureRef.Y - CommonRef.Y); for (int i = start; i < width; i++) { for (int j = 0; j < SourceLock.Height; j++) { Color c = SourceLock.GetPixel(i, j); CommonLock.SetPixel(i - xDiff, j - yDiff, c); } } SourceLock.UnlockBits(); CommonLock.UnlockBits(); }
private void RecalculateColor(Bitmap Original, Bitmap Destination, List <List <Point3D> > HomographySecondToFirst) { //Recalculate new color of the pixel. LockBitmap SecondBmpLock = new LockBitmap(Original); SecondBmpLock.LockBits(); LockBitmap SecondBmpResultLock = new LockBitmap(Destination); SecondBmpResultLock.LockBits(); int widthSecondOriginal = Original.Width; int heightSecondOriginal = Original.Height; ProgBar.Maximum = HomographySecondToFirst.Count; ProgBar.Minimum = 0; ProgBar.Step = 1; ProgBar.Value = 0; for (int j = 0; j < HomographySecondToFirst.Count - 2; j++) { for (int i = 0; i < HomographySecondToFirst[j].Count - 2; i++) { //Surrounded pixel from Points List <Point3D> currList = new List <Point3D>(); currList.Add(HomographySecondToFirst[j][i]); currList.Add(HomographySecondToFirst[j][i + 1]); currList.Add(HomographySecondToFirst[j + 1][i + 1]); currList.Add(HomographySecondToFirst[j + 1][i]); // Only if the distorted polygon is inside the bitmap if (!CompareTwoRetangle(currList, widthSecondOriginal, heightSecondOriginal)) { Color c = RemapPixels.RecalcPixelColor(currList, SecondBmpLock, widthSecondOriginal, heightSecondOriginal); SecondBmpResultLock.SetPixel(i, j, c); } } ProgBar.PerformStep(); } SecondBmpLock.UnlockBits(); SecondBmpResultLock.UnlockBits(); }