日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】用fo-dicom实现print scu的注意事项!!!!!!!!!

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】用fo-dicom实现print scu的注意事项!!!!!!!!! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:https://blog.csdn.net/tvsofa2008/article/details/50245357

用fo-dicom實現print scu的注意事項

fo-dicom是一個開源的協議庫,開發語言是c#。網上針對fo-dicom的分析也有不少,但是專門針對dicom print的文章還是太少了。

近幾天需要用fo-dicom實現一個print scu,把其中的一些注意事項總結一下。

工欲善其事,必先利其器。在編程調試過程中各種各樣的輔助工具必不可少。經過網上搜索、自己驗證測試后,推薦使用方便的scp,scu測試工具:

  • charruasoft print scu
  • charruasoft print scp
  • 這兩個工具使用方便,scu只需要設置一下called AET、calling AET、remote host、remote port等參數即可。

    scp稍微麻煩一些,必須先在Rules選項卡中建立一個新項,填入called AET、打印機名稱等。然后在General選項卡中設置scp參數即可。

    工具齊備了,下面開始代碼吧。fo-dicom本身例子已經包含了printscu和printscp,先直接使用例子中的代碼試一下,發現:

  • fo-dicom printscp + fo-dicom printscu能正常打印。
  • fo-dicom printscp + charruasoft print scu不能正常打印。
  • fo-dicom printscu + charruasoft print scp也不能正常打印。
  • 所以貌似fo-dicom自己給的print代碼是有問題的,無法直接使用。

    先用fo-dicom printscu + charruasoft print scp測試打印,把scp和scu的輸出信息抓好保存。
    再用charruasoft print scu + charruasoft print scp測試打印,把scp和scu的輸出信息抓好保存。
    對比分析發現fo-dicom printscu一開始的associate都沒有成功!它并沒有協商BasicGrayscalePrintManagementMetaSOPClass,分析dicom代碼后,PrintJob.cs的Print函數增加如下代碼:

    DicomPresentationContext pc = new DicomPresentationContext((byte)0, DicomUID.BasicGrayscalePrintManagementMetaSOPClass); pc.AddTransferSyntax(DicomTransferSyntax.ImplicitVRLittleEndian); dicomClient.AdditionalPresentationContexts.Add(pc);

    當然,我們打印的是黑白片子,如果要打印彩色片子,BasicGrayscalePrintManagementMetaSOPClass要相應改變。

    在DicomClient.cs中修改public IAsyncResult BeginSend(Stream stream, string callingAe, string calledAe, AsyncCallback callback, object state)函數:

    //foreach (var request in _requests) // assoc.PresentationContexts.AddFromRequest(request); foreach (var context in _contexts)assoc.PresentationContexts.Add(context.AbstractSyntax, context.GetTransferSyntaxes().ToArray());foreach (var pc in assoc.PresentationContexts) {foreach (var request in _requests){request.PresentationContext = new DicomPresentationContext(pc.ID,request.PresentationContext.AbstractSyntax,pc.AcceptedTransferSyntax,DicomPresentationContextResult.Proposed);} }

    這樣associate過程終于通過了。但是在fo-dicom print scu發送第2次N-CREATE數據包時scp返回”處理失敗”錯誤。

    繼續分析,發現是fo-dicom第2次N-CREATE數據包的Sequence字段中只有ReferencedImageBoxSequence,并不存在ReferencedFilmSessionSequence,這個明顯與正確的抓包有差別,因此懷疑是這里的問題,即:fo-dicom在FilmBox的Initialize()函數中沒有加入ReferencedFilmSessionSequence字段。找到問題就好解決了,在FilmBox.cs的Initialize()函數中加入代碼:

    Add(new DicomSequence(DicomTag.ReferencedFilmSessionSequence));var item = new DicomDataset(); item.Add(DicomTag.ReferencedSOPClassUID,_filmSession.SOPClassUID); item.Add(DicomTag.ReferencedSOPInstanceUID,_filmSession.SOPInstanceUID);var seq = Get<DicomSequence>(DicomTag.ReferencedFilmSessionSequence); seq.Items.Add(item); ... //if (!this.Contains(DicomTag.RequestedResolutionID)) //{ // RequestedResolutionID = "STANDARD"; //}

    這回再編譯運行,已經能正確的與scp通訊了,片子打印無誤。

    總結

    在我們的應用中,fo-dicom庫的print scu代碼確實存在問題,無法與膠片打印機正確通訊。

    fo-dicom庫需要做稍微的修改:

  • DicomClient.cs的BeginSend函數。
  • FilmBox.cs的Initialize函數。
  • fo-dicom例子中的PrintJob.cs的Print函數。
  • 當然,這可能和我們使用的膠片打印機有關,在其它應用中可能還需要適當修改。

    問題

    1.fo-dicom里找不到print的例子呀,能告訴我在哪里嗎?
    ? ?fo-dicom-development\Examples\Print SCU目錄下

    2.代碼更正

    Add(new DicomSequence(DicomTag.ReferencedFilmSessionSequence));
    var item = new DicomDataset();
    item.Add(DicomTag.ReferencedSOPClassUID,_filmSession.SOPClassUID);
    item.Add(DicomTag.ReferencedSOPInstanceUID,_filmSession.SOPInstanceUID);
    var seq = Get<DicomSequence>(DicomTag.ReferencedFilmSessionSequence);//樓主這里少了一個括號
    seq.Items.Add(item);

    3.新版本按照這個改了,還是沒有通過...
    fo-dicom request包中InstanceUID字段都是scu產生并填充的,正常來說,scp只是把收到的InstanceUID字段原樣返回。因此,你可以控制InstanceUID的值。 并且,用scp response的UID返回值填充下一個request的UID應該是可行的,fo-dicom本身就是這樣實現的吧

    對的,這個參數導致第二次N-Create的response讀取PDU時出錯,無法繼續進行(用其他SCP程序該步可以通過,因為charruasoft print scp會返回你N-Create設置的參數和它帶的其他一些參數),可是當我屏蔽了這個參數,進行到N-Action時,還是有問題,其中的SOPInstanceUID給的不對,應該是動態的,用第二次N-Create返回回來的SOPInstanceUID,然而想在N-Create的Response中設置卻是無法實現的,因為在收到Response時,N-Action的request好像已經發出去了,所以邏輯好像是有問題的。(我已用多種虛擬打印設備測試過)

    我是改完后根據回憶寫的,可能有遺漏的地方。你是用文中提到的那個scp程序測試的嗎?如果是應該是能通過的。要是用真實膠片機測試,可能不一定行。你把FilmBox中 //if (!this.Contains(DicomTag.RequestedResolutionID)) //{ // RequestedResolutionID = "STANDARD"; //} 這樣改一下試試,祝好運。

    總結

    以上是生活随笔為你收集整理的【转】用fo-dicom实现print scu的注意事项!!!!!!!!!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 夜夜躁狠狠躁日日躁 | 91日韩在线视频 | 又黄又爽无遮挡 | 国内av网站| 老熟妇仑乱视频一区二区 | 欧美精品二区三区 | 免费看麻豆 | 亚洲欧美日韩一区二区 | 国产欧美精品 | 欧美性猛片aaaaaaa做受 | 99精品国自产在线 | 欧美成人综合 | 中文字幕精品久久久久人妻红杏1 | 欧美肉丝袜videos办公室 | 亚洲精品久久一区二区三区777 | 亚色视频| 欧美四虎 | 亚洲国产精品天堂 | 国产乱码精品1区2区3区 | 日韩少妇精品 | 7x7x7x人成影视 | 日本十八禁视频无遮挡 | 91精品导航| 三级全黄做爰在线观看 | javxxx| 亚洲自拍电影 | 老司机深夜福利网站 | 草av在线| 草久久av | 69精品久久| 老司机av影院 | 免费成人激情视频 | h片在线免费 | 午夜精品福利在线观看 | 欧美一级视频免费 | 麻豆精品在线视频 | 久久久精品毛片 | 国产精品乱码妇女bbbb | 天天摸夜夜添狠狠添婷婷 | 操大爷影院| 天天躁日日躁狠狠躁伊人 | 国产成人精品毛片 | 91精品婷婷国产综合久久 | 91国在线啪| 97成人资源站 | 男生插女生视频 | 骚虎免费视频 | 永久免费无码av网站在线观看 | 精品成人国产 | 正在播放超嫩在线播放 | 中文字幕在线国产 | 亚洲人视频在线观看 | 亚洲精品国产精华液 | 欧美特黄 | 色xxxx | 午夜爱爱网站 | 国产精品vip | 欧美偷拍少妇精品一区 | 国产做爰全过程免费视频 | 四虎在线观看 | 国产成人精品综合在线观看 | 中文字幕日韩一级 | 亚洲乱仑 | 性调教学院高h学校 | 男女男精品视频网站 | 一级黄色片在线免费观看 | 精品在线播放 | 岳睡了我中文字幕日本 | 一区二区三区四区人妻 | 成 年 人 黄 色 大 片大 全 | 在线视频1卡二卡三卡 | 成人免费性生活视频 | 国产精品乱码久久久久久久久 | 久久久久亚洲av无码专区首jn | 国产成人av免费观看 | 能免费看av的网站 | 欧美v亚洲 | 亚洲福利久久 | 污污网站在线观看视频 | 国产情侣激情 | 久久久精品美女 | 亚洲综合成人网 | 国产乱子伦精品无码码专区 | 不卡的av在线免费观看 | 成人av网站大全 | 天天射日日干 | 丰满少妇xoxoxo视频 | 国产视频在线免费观看 | 在线视频欧美一区 | 国产无遮掩 | av男人网 | 成人一级影视 | 五月天婷婷视频 | 涩涩屋污 | 精品久久久久久久久久久国产字幕 | 欧美在线播放 | 亚洲欧美激情另类 | 日韩乱码一区二区 | 久久久久久久久久久久久久久久久久 |