예제 #1
0
    public byte[] DICOMSeriesToVolume(DicomDirectoryRecord series, out Int3 size)
    {
        size = GetSizeForRecord(series);
        var voxels = new VolumeBuffer <Color32>(size);

        var tex = new Texture2D(2, 2);

        var instanceNumbers = series.LowerLevelDirectoryRecordCollection.Select(x => x.Get <int>(DicomTag.InstanceNumber)).OrderBy(x => x).ToArray();

        for (var z = 0; z < instanceNumbers.Length; z++)
        {
            var frame = instanceNumbers[z];
            tex = loadDicomInstance.GetTexture2DForRecord(series, frame);
            var fromPixels = tex.GetPixels32();
            for (var y = 0; y < size.y; y++)
            {
                for (var x = 0; x < size.x; x++)
                {
                    var from = fromPixels[x * resolution + ((size.y - 1 - y) * size.x) * resolution * 2];
                    voxels.SetVoxel(new Int3(x, y, z), from);
                }
            }
        }

        voxels.ClearEdges(new Color32(0, 0, 0, 0));
        return(VolumeTextureUtils.Color32ArrayToByteArray(voxels.DataArray));
    }