private static void Signed5Bit(byte[] pixelData, PixelData pixelDataWrapper) { pixelData[0] = 31; int actualValue = pixelDataWrapper.GetPixel(0, 0); Assert.AreEqual(-1, actualValue); int expectedValue = -1; pixelDataWrapper.SetPixel(0, 0, expectedValue); actualValue = pixelDataWrapper.GetPixel(0, 0); Assert.AreEqual(expectedValue, actualValue); expectedValue = -16; pixelDataWrapper.SetPixel(0, 0, expectedValue); actualValue = pixelDataWrapper.GetPixel(0, 0); Assert.AreEqual(expectedValue, actualValue); expectedValue = 15; pixelDataWrapper.SetPixel(0, 0, expectedValue); actualValue = pixelDataWrapper.GetPixel(0, 0); Assert.AreEqual(expectedValue, actualValue); expectedValue = 0; pixelDataWrapper.SetPixel(0, 0, expectedValue); actualValue = pixelDataWrapper.GetPixel(0, 0); Assert.AreEqual(expectedValue, actualValue); }
public void ChangeAspectRatio(DicomFile file) { if (NewAspectRatio.IsNull || FloatComparer.AreEqual(NewAspectRatio.Value, 1)) { throw new InvalidOperationException("Invalid new aspect ratio"); } if (file.TransferSyntax.Encapsulated) { file.ChangeTransferSyntax(TransferSyntax.ExplicitVrLittleEndian); } OldInfo = new PixelDataInfo(file.DataSet); if (!OldInfo.IsSquare) { throw new ArgumentException("Pixels are already non-square."); } NewInfo = OldInfo.Clone(); NewInfo.AspectRatio = NewAspectRatio; if (IncreasePixelDimensions) { if (NewAspectRatio.Value < 1) { NewInfo.Rows = (int)(OldInfo.Rows / NewAspectRatio.Value + 0.5); } else { NewInfo.Columns = (int)(OldInfo.Columns * NewAspectRatio.Value + 0.5); } } else { if (NewAspectRatio.Value < 1) { NewInfo.Columns = (int)(OldInfo.Columns * NewAspectRatio.Value + 0.5); } else { NewInfo.Rows = (int)(OldInfo.Rows / NewAspectRatio.Value + 0.5); } } float rowScale = OldInfo.Rows / (float)NewInfo.Rows; float colScale = OldInfo.Columns / (float)NewInfo.Columns; if (RemoveCalibration) { NewInfo.PixelSpacing = new PixelSpacing(0, 0); NewInfo.ImagerPixelSpacing = new PixelSpacing(0, 0); } else { NewInfo.PixelSpacing = new PixelSpacing(NewInfo.PixelSpacing.Row * rowScale, NewInfo.PixelSpacing.Column * colScale); NewInfo.ImagerPixelSpacing = new PixelSpacing(NewInfo.ImagerPixelSpacing.Row * rowScale, NewInfo.ImagerPixelSpacing.Column * colScale); } ValidateNewInfo(); NewInfo.SeriesDescription = (OldInfo.SeriesDescription ?? "") + String.Format(" ({0}:{1}, dim/cal={2}/{3})", NewAspectRatio.Row, NewAspectRatio.Column, IncreasePixelDimensions ? "y" : "n", NewInfo.IsCalibrated ? "y" : "n"); NewInfo.PlanarConfiguration = 0; PixelData oldPixelData = OldInfo.GetPixelData(); PixelData newPixelData = NewInfo.GetPixelData(); for (int row = 0; row < NewInfo.Rows; ++row) { for (int column = 0; column < NewInfo.Columns; ++column) { var sourcePoint = new PointF(column * colScale, row * rowScale); int interpolated = PerformBilinearInterpolationAt(oldPixelData, sourcePoint); newPixelData.SetPixel(column, row, interpolated); } } NewInfo.SetPixelData(newPixelData); NewInfo.UpdateDataSet(file.DataSet); }