private static MyTiff decodeSubsample(MyCompressTiff myct, MyDeal.ProgressMonitor monitor) { MyTiff decodeTiff = new MyTiff(); Bitmap baseImg = null; for (int i = 0; i < myct.baseImg.Count; i++) { if (myct.baseImg.ElementAt(i) != null) { decodeTiff.views.Add(baseImg = new Bitmap(myct.baseImg.ElementAt(i))); } else { Bitmap left = (Bitmap)decodeTiff.views.Last(); Bitmap right = new Bitmap(myct.baseImg.ElementAt(i + 1)); baseImg = MyDeal.Interpolation(left, right); decodeTiff.views.Add(baseImg); } if (monitor != null) { monitor.OnValueChanged(new MyDeal.ValueEventArgs() { value = (double)i / myct.baseImg.Count }); } } return(decodeTiff); }
private static MyTiff decodeMotion(MyCompressTiff myct, MyDeal.ProgressMonitor monitor) { MyTiff decodeTiff = new MyTiff(); Bitmap baseImg = null; MyMotionTiff targetMotion; for (int i = 0; i < myct.baseImg.Count; i++) { if (myct.baseImg.ElementAt(i) != null) { decodeTiff.views.Add(baseImg = new Bitmap(myct.baseImg.ElementAt(i))); } else { targetMotion = myct.motionTiff.ElementAt(i); baseImg = MyMotionTiff.decode(baseImg, targetMotion); decodeTiff.views.Add(baseImg); } if (monitor != null) { monitor.OnValueChanged(new MyDeal.ValueEventArgs() { value = (double)i / myct.baseImg.Count }); } } return(decodeTiff); }
protected virtual void initialForm() { basicProgress = new MyDeal.ProgressMonitor(progressBar1); //openFileDialog Setting openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "tif file(*.tiff)|*.01.tiff;*01.*.tiff|my compress file(*.MYCT)|*.MYCT"; openFileDialog1.Title = "Select a video file"; openFileDialog1.CheckFileExists = true; openFileDialog1.CheckPathExists = true; //initial PSNR Chart chart1.ChartAreas.ElementAt(0).AxisX.Minimum = 0; chart1.ChartAreas.ElementAt(0).AxisX.Maximum = 0; chart1.ChartAreas.ElementAt(0).AxisX.Interval = 5;//橫坐標 標籤距 chart1.ChartAreas.ElementAt(0).AxisY.Minimum = 0; chart1.ChartAreas.ElementAt(0).AxisY.Maximum = MyDeal.maxPSNR; //add psnr chart1.Series.Clear(); Series PSNRSeries = addSeries(seriesIdA, "A PSNR(dB)", Color.Blue); chart1.Series.Add(PSNRSeries); player = new MyPlayer(pictureBox1); player.SideWorkDo.Add(new playCombine(countPSNR)); player.SideWorkArgs.Add(new object[] { player, chart1, new object[] { seriesIdA } }); }
private static MyTiff decodeBB(MyCompressTiff myct, MyDeal.ProgressMonitor monitor) { MyTiff decodeTiff = new MyTiff(); Bitmap dst = null; for (int i = 0; i < myct.baseImg.Count; i++) { if (i == 0) { decodeTiff.views.Add(dst = new Bitmap(myct.baseImg.ElementAt(i))); } else { Bitmap left = (Bitmap)decodeTiff.views.Last(); dst = (Bitmap)myct.baseImg.ElementAt(i).Clone(); BitmapData leftData = left.LockBits(MyDeal.boundB(left), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); BitmapData dstData = dst.LockBits(MyDeal.boundB(dst), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); unsafe { byte *leftPtr = (byte *)leftData.Scan0; byte *dstPtr = (byte *)dstData.Scan0; int skipByte = dstData.Stride - 3 * dstData.Width; for (int y = 0; y < dstData.Height; y++) { for (int x = 0; x < dstData.Width; x++) { if ((dstPtr[0] != dstPtr[1]) || (dstPtr[1] != dstPtr[2])) { dstPtr[0] = leftPtr[0]; dstPtr[1] = leftPtr[1]; dstPtr[2] = leftPtr[2]; } dstPtr += 3; leftPtr += 3; } dstPtr += skipByte; leftPtr += skipByte; } } left.UnlockBits(leftData); dst.UnlockBits(dstData); decodeTiff.views.Add(dst); } if (monitor != null) { monitor.OnValueChanged(new MyDeal.ValueEventArgs() { value = (double)i / myct.baseImg.Count }); } } return(decodeTiff); }
public static MyTiff decode(MyCompressTiff myct, MyDeal.ProgressMonitor monitor) { switch (myct.type) { case MyCompressTiffDefine.TYPE.MOTION: return(decodeMotion(myct, monitor)); case MyCompressTiffDefine.TYPE.SUBSAMPLE: return(decodeSubsample(myct, monitor)); case MyCompressTiffDefine.TYPE.BLOCKBASE: return(decodeBB(myct, monitor)); } return(null); }