fo-dicom打印PrintScu向模拟打印软件推送打印收不到图像问题
最近碰到了了个比较蛋疼问题 自己使用fo-dicom 开发了printscp、printscu各一个 开发过程中调试互相通信都没啥问题,最后在试着向模拟打印软件(网上很多)推送的时候出现了问题,推送过去对面无法接收到图像 显示有任务 但就是没有图像,被这个卡进度卡了很久。
网上找到一个类似帖子
最后找到一个帖子《用fo-dicom实现print scu的注意事項》有碰到类似问题的可以自行百度看看。 通过这个贴的举例来看 fo-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); } }
在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(DicomTag.ReferencedFilmSessionSequence); seq.Items.Add(item);
重新运行程序 虚拟打印机接收到图像了