Beispiel #1
0
        static bool GetImageList(RBObjectQuery query, out List <RBImage> imageList)
        {
            imageList = new List <RBImage>();

            int cnt;
            int ret;
            var errmsg = new StringBuilder(IRCOM_MAX_MESSAGE_LENGTH);

            var ptr = RsGetImageList(AppUtil.rsAddr, AppUtil.rsPort, ref query, out cnt, out ret, errmsg);

            if (ptr == null || ret != 0)
            {
                LogUtil.Error2("RsGetImageList[{0}] {1}", ret, errmsg);
                return(false);
            }

            try
            {
                for (int i = 0; i < cnt; i++)
                {
                    var image = (RBImage)Marshal.PtrToStructure(ptr + Marshal.SizeOf(typeof(RBImage)) * i, typeof(RBImage));
                    if (image.ObjectType != RB_OBJECT_IMAGE)
                    {
                        continue;
                    }

                    if (image.DBStatus == RB_STATUS_DBLOCK)
                    {
                        LogUtil.Warn1("RB_STATUS_DBLOCK: {0}", image.InstUID);
                        continue;
                    }

                    imageList.Add(image);
                }
                return(true);
            }
            finally
            {
                RsFree(ptr);
            }
        }
Beispiel #2
0
        //画像一覧の取得
        public static void GetImageList(SeriesKey key, out List <ImageTag> tags)
        {
            tags = new List <ImageTag>();

            if (!key.IsImage)
            {
                var imageQuery = new RBObjectQuery();
                imageQuery.is_filter_on = 1;
                imageQuery.location     = Int32.Parse(key.StorageID);
                imageQuery.StudyUID     = key.StudyInstanceUID;
                imageQuery.SeriesUID    = key.SeriesInstanceUID;

                List <RBImage> imageList;
                if (!GetImageList(imageQuery, out imageList))
                {
                    return;
                }

                //ソート
                imageList.Sort((x, y) =>
                {
                    int c = x.ImageNo.CompareTo(y.ImageNo);
                    if (c == 0)
                    {
                        return(x.InstUID.CompareTo(y.InstUID));
                    }
                    else
                    {
                        return(c);
                    }
                });

                foreach (var image in imageList)
                {
                    var imkey = new ImageKey()
                    {
                        StudyInstanceUID  = key.StudyInstanceUID,
                        SeriesInstanceUID = key.SeriesInstanceUID,
                        SOPInstanceUID    = image.InstUID,
                        StorageID         = key.StorageID
                    };

                    var tag = new ImageTag();
                    tag.ImageKey                = ConvertUtil.Serialize(imkey); //new RsImageKey(key, image.InstUID);
                    tag.InstanceNumber          = image.ImageNo;
                    tag.SliceThickness          = image.SliceThickness.ToString();
                    tag.ImagePositionPatient    = image.ImagePosition.ToString('\\');
                    tag.ImageOrientationPatient = image.ImageOrientation.ToString('\\');
                    tag.SliceLocation           = image.SliceLocation.ToString();
                    tag.Rows         = image.Rows;
                    tag.Columns      = image.Columns;
                    tag.PixelSpacing = image.PixelSpacing.ToString('\\');
                    tag.WindowCenter = image.Level.ToString('\\');
                    tag.WindowWidth  = image.Width.ToString('\\');

                    tags.Add(tag);
                }
            }
            else
            {
                //※イメージで検索できない
                var imageQuery = new RBObjectQuery();
                imageQuery.is_filter_on = 1;
                imageQuery.location     = Int32.Parse(key.StorageID);
                imageQuery.StudyUID     = key.StudyInstanceUID;
                imageQuery.SeriesUID    = key.SeriesInstanceUID;

                List <RBImage> imageList;
                if (!GetImageList(imageQuery, out imageList))
                {
                    return;
                }

                foreach (var image in imageList)
                {
                    if (image.InstUID == key.SOPInstanceUID)
                    {
                        var nof = image.NoOfFrames;
                        if (nof == 0)
                        {
                            nof = 1;
                        }

                        for (int i = 0; i < nof; i++)
                        {
                            var imkey = new ImageKey()
                            {
                                StudyInstanceUID  = key.StudyInstanceUID,
                                SeriesInstanceUID = key.SeriesInstanceUID,
                                SOPInstanceUID    = image.InstUID,
                                FrameNumber       = i,
                                StorageID         = key.StorageID
                            };

                            var tag = new ImageTag();
                            tag.ImageKey                = ConvertUtil.Serialize(imkey); //new RsImageKey(key, i);
                            tag.InstanceNumber          = i;
                            tag.SliceThickness          = image.SliceThickness.ToString();
                            tag.ImagePositionPatient    = image.ImagePosition.ToString('\\');
                            tag.ImageOrientationPatient = image.ImageOrientation.ToString('\\');
                            tag.SliceLocation           = image.SliceLocation.ToString();
                            tag.Rows           = image.Rows;
                            tag.Columns        = image.Columns;
                            tag.PixelSpacing   = image.PixelSpacing.ToString('\\');
                            tag.WindowCenter   = image.Level.ToString('\\');
                            tag.WindowWidth    = image.Width.ToString('\\');
                            tag.NumberOfFrames = nof;

                            tags.Add(tag);
                        }

                        break;
                    }
                }
            }
        }
Beispiel #3
0
        //シリーズ一覧の取得
        public static void GetSeriesList(StudyKey key, out List <SeriesTag> tags)
        {
            tags = new List <SeriesTag>();

            var seriesQuery = new RBSeriesQuery();

            seriesQuery.is_filter_on = 1;
            seriesQuery.location     = Int32.Parse(key.StorageID);
            seriesQuery.StudyUID     = key.StudyInstanceUID;

            List <RBSeries> seriesList;

            if (!GetSeriesList(seriesQuery, out seriesList))
            {
                return;
            }

            //ソート
            seriesList.Sort((x, y) =>
            {
                int c = x.SeriesNo.CompareTo(y.SeriesNo);
                if (c == 0)
                {
                    return(x.SeriesUID.CompareTo(y.SeriesUID));
                }
                else
                {
                    return(c);
                }
            });

            foreach (var series in seriesList)
            {
                var imageQuery = new RBObjectQuery();
                imageQuery.is_filter_on = 1;
                imageQuery.location     = Int32.Parse(key.StorageID);
                imageQuery.StudyUID     = key.StudyInstanceUID;
                imageQuery.SeriesUID    = series.SeriesUID;

                List <RBImage> imageList;
                if (!GetImageList(imageQuery, out imageList))
                {
                    continue;
                }

                //ソート
                imageList.Sort((x, y) =>
                {
                    int c = x.ImageNo.CompareTo(y.ImageNo);
                    if (c == 0)
                    {
                        return(x.InstUID.CompareTo(y.InstUID));
                    }
                    else
                    {
                        return(c);
                    }
                });

                int nof = 0;
                foreach (var image in imageList)
                {
                    nof += image.NoOfFrames;
                }

                if (nof == 0)
                {
                    var sekey = new SeriesKey()
                    {
                        StudyInstanceUID  = key.StudyInstanceUID,
                        SeriesInstanceUID = series.SeriesUID,
                        SOPInstanceUID    = null,
                        StorageID         = key.StorageID,
                        IsImage           = false
                    };

                    var tag = new SeriesTag();
                    tag.SeriesKey         = ConvertUtil.Serialize(sekey); //new RsSeriesKey(key, series.SeriesUID, series.Modality, series.SeriesDesc, series.SeriesNo);
                    tag.SeriesNumber      = series.SeriesNo;
                    tag.Modality          = series.Modality;
                    tag.SeriesDescription = series.SeriesDesc;
                    tag.NumberOfImages    = series.no_im;
                    tag.NumberOfFrames    = nof;

                    tags.Add(tag);
                }
                else
                {
                    //イメージ
                    foreach (var image in imageList)
                    {
                        var sekey = new SeriesKey()
                        {
                            StudyInstanceUID  = key.StudyInstanceUID,
                            SeriesInstanceUID = series.SeriesUID,
                            SOPInstanceUID    = image.InstUID,
                            StorageID         = key.StorageID,
                            IsImage           = true
                        };

                        var tag = new SeriesTag();
                        tag.SeriesKey         = ConvertUtil.Serialize(sekey); //new RsSeriesKey(key, series.SeriesUID, image.InstUID, image.NoOfFrames);
                        tag.SeriesNumber      = series.SeriesNo;
                        tag.Modality          = series.Modality;
                        tag.SeriesDescription = series.SeriesDesc;
                        tag.NumberOfImages    = 1;
                        tag.NumberOfFrames    = image.NoOfFrames;

                        tags.Add(tag);
                    }
                }
            }
        }
Beispiel #4
0
 static extern IntPtr RsGetImageList(byte[] addr, ushort port_no, ref RBObjectQuery query_data, out int no_of_obj, out int ret_code, StringBuilder message);