找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
查看: 2246|回复: 1

使用过UCDMC并用其开发Print-SCU的朋友请进,谢谢!

[复制链接]
发表于 2007-10-8 16:46:10 | 显示全部楼层 |阅读模式
UpdateData(TRUE);
m_pdu.ClearAbstractSyntaxs();
m_pdu.SetRemoteAddress((LPCTSTR)m_strRemoteAE);
m_pdu.SetLocalAddress((LPCTSTR)m_strLocalAE);
m_pdu.SetTimeOut(m_timeOut);
m_pdu.SetApplicationContext(UID_APPLICATION_CONTEXT);
m_pdu.AddAbstractSyntax(UID_IMPL_VR_LE_TRANSFER_SYNTAX);
m_pdu.AddAbstractSyntax(UID_EXPL_VR_BE_TRANSFER_SYNTAX);
m_pdu.AddAbstractSyntax(UID_EXPL_VR_LE_TRANSFER_SYNTAX);
m_pdu.AddAbstractSyntax(UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS);
m_pdu.AddAbstractSyntax(UID_BASIC_GRAYSCALE_IMAGE_BOX_STORAGE_SOP_CLASS);
m_pdu.AddAbstractSyntax(UID_BASIC_FILM_BOX_SOP_CLASS);
m_pdu.AddAbstractSyntax(UID_BASIC_FILM_SESSION_STORAGE_SOP_CLASS);
m_pdu.AddAbstractSyntax(UID_PRINTER_SOP_CLASS);
m_pdu.AddAbstractSyntax(UID_PRINT_JOB_SOP_CLASS);
if (!m_pdu.Connect((LPCTSTR)m_strIP, (LPCTSTR)m_strPort))
{
     AfxMessageBox("Can not connect printer...");
    TRACE1("Printer AE: %s\n", m_strRemoteAE);
    TRACE1("Printer IP: %s\n", m_strIP);
    TRACE1("Printer Port: %s\n", m_strPort);
    return;
}

DataSet rsp;
DataSet data;
UINT16  status;
CString strValue;
//N-GET (PRINTER SOP Instance)
const string instUID = "1.2.840.10008.5.1.1.17";
TagVector tag; // no use
NGetRQ getPrinter(uniq16odd(), UID_PRINTER_SOP_CLASS, instUID, tag);//instUID, tag);
if (!m_pdu.WriteCommand(getPrinter, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
{
        AfxMessageBox("Can not get printer information...");
        m_pdu.Close();
        return;
}
NGetRSP getrsp(uniq16odd(), UID_PRINTER_SOP_CLASS, status, NO_DATA_SET);
if (!m_pdu.WriteCommand(getrsp, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
{
m_pdu.Close();
                return;

        }
        if (!m_pdu.Read(rsp))
        {
                m_pdu.Close();
                return;
        }
       
        DumpDataset("c:\\get_printer_info.txt", rsp);
        //END of N-GET

        //N-CREATE(Film Session SOP Instance)
        NCreateRQ createFilmRQ(uniq16odd(), UID_BASIC_FILM_SESSION_STORAGE_SOP_CLASS, instUID, YES_DATA_SET);
        data.insertElem(TAG_REF_SOP_CLASS_UID, VR_UI, UID_BASIC_FILM_SESSION_STORAGE_SOP_CLASS);
        strValue = "1";
        data.insertElem(TAG_NUMBER_OF_COPIES, VR_IS, (LPCTSTR)strValue);
        strValue = "MED";
        data.insertElem(TAG_PRINT_PRIORITY, VR_CS, (LPCTSTR)strValue);
        strValue = _T("BLUE FILM");
        data.insertElem(TAG_MEDIUM_TYPE, VR_CS, (LPCTSTR)strValue);
        strValue = _T("PROCESSOR");
        data.insertElem(TAG_FILM_DESTINATION, VR_CS, (LPCTSTR)strValue);
        if (m_pdu.WriteCommand(createFilmRQ, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS) &&
                m_pdu.WriteDataSet(data, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
        {
               
        }
        else
        {
                AfxMessageBox("Can not create film session...");
                m_pdu.Close();
                return;
        }
        if (!m_pdu.Read(rsp))
        {
                AfxMessageBox("Can not get film session feedback information");
                m_pdu.Close();
                return;
        }
        DumpDataset("c:\\create_film_session.txt", rsp);
        //END of N-CREATE

        //CREATE ONE FILM
        //N-CREATE(Film Box SOP Instance)
        NCreateRQ createFilmBoxRQ(uniq16odd(), UID_BASIC_FILM_BOX_SOP_CLASS, instUID, YES_DATA_SET);
//        data.insertElem(TAG_AFF_SOP_CLASS_UID, VR_UI, UID_BASIC_FILM_BOX_SOP_CLASS);
        data.insertElem(TAG_REF_SOP_CLASS_UID, VR_UI, UID_BASIC_FILM_BOX_SOP_CLASS);
        strValue = _T("STANDARD\\1,1");
        data.insertElem(TAG_IMAGE_DISPLAY_FORMAT, VR_ST, (LPCTSTR)strValue);
        strValue = _T("PORTRAIT");
        data.insertElem(TAG_FILM_ORIENTATION, VR_CS, (LPCTSTR)strValue);
        strValue = _T("8INX10IN");
        data.insertElem(TAG_FILM_SIZE_ID, VR_CS, (LPCTSTR)strValue);
        strValue = _T("REPLICATE");
        data.insertElem(TAG_MAGNIFICATION_TYPE, VR_CS, (LPCTSTR)strValue);
        strValue = _T("WHITE");
        data.insertElem(TAG_BORDER_DENSITY, VR_CS, (LPCTSTR)strValue);
        strValue = _T("BLACK");
        data.insertElem(TAG_EMPTY_IMAGE_DENSITY, VR_CS, (LPCTSTR)strValue);

        data.insertElem(TAG_MIN_DENSITY, UINT16(10));
        strValue = _T("320");
        data.insertElem(TAG_MAX_DENSITY, UINT16(320));
        strValue = _T("NO");
        data.insertElem(TAG_TRIM, VR_CS, (LPCTSTR)strValue);
//        strValue = _T("");
//        data.insertElem(MC_ATT_REQUESTED_RESOLUTION_ID, (LPCTSTR)strValue);
        if (m_pdu.WriteCommand(createFilmBoxRQ, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS) &&
                m_pdu.WriteDataSet(data, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
        {

        }
        else
        {
                AfxMessageBox("Can not create film box...");
                m_pdu.Close();
                return;
        }
        if (!m_pdu.Read(rsp))
        {
                AfxMessageBox("Can not get create film box feedback information");
                m_pdu.Close();
                return;
        }
        DumpDataset("c:\\create_film_box.txt", rsp);

        //N-SET (ONLY ONE IMAGE)
        NSetRQ setImage(uniq16odd(), UID_BASIC_GRAYSCALE_IMAGE_BOX_STORAGE_SOP_CLASS, instUID);
        data.insertElem(TAG_IMAGE_POS, INT16(1));
        strValue = "NORMAL";
        data.insertElem(TAG_POLARITY, VR_CS, (LPCTSTR)strValue);
        data.insertElem(TAG_SAMPLES_PER_PX,  UINT16(1));
        strValue = "MONOCHROME2";
        data.insertElem(TAG_PHOTOMETRIC, VR_CS, (LPCTSTR)strValue);
        data.insertElem(TAG_ROWS, UINT16(3072));
        data.insertElem(TAG_COLUMNS, UINT16(2560));
        data.insertElem(TAG_BITS_ALLOC, UINT16(8));
        data.insertElem(TAG_BITS_STORED, UINT16(16));
        data.insertElem(TAG_HIGH_BIT, UINT16(14));
        unsigned short* pData = new unsigned short[2560 * 3072];
        memset(pData, 1, 2560 * 3072 * 2);
        data.insertElem(TAG_PIXEL_DATA, VR_OB, 2560 * 3072 * 2, pData);
//        data.insertElem(, );

        if (m_pdu.WriteCommand(setImage, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS) &&
                m_pdu.WriteDataSet(data, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
        {

        }
        else
        {
                AfxMessageBox("Can not set image box...");
                m_pdu.Close();
                return;
        }
        if (!m_pdu.Read(rsp))
        {
                AfxMessageBox("Can not get image box information");
                return;
        }
        DumpDataset("c:\\set_image_box.txt", rsp);

        //N-ACTION(PRINT, Film Box SOP Instance)
        NActionRQ actionFilmBox(uniq16odd(), UID_BASIC_FILM_BOX_SOP_CLASS, instUID, 1, NO_DATA_SET);
//        data.insertElem(TAG_REF_SOP_CLASS_UID, VR_UI, UID_BASIC_FILM_BOX_SOP_CLASS);
//        data.insertElem(TAG_REF_SOP_INST_UID, VR_UI, instUID);
        if (m_pdu.WriteCommand(actionFilmBox, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))// &&
    //        m_pdu.WriteDataSet(data, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
        {

        }
        else
        {
                AfxMessageBox("Can not action film box");
                m_pdu.Close();
                return;
        }
        if (!m_pdu.Read(rsp))
        {
                AfxMessageBox("Can not get action film information");
                return;
        }
        DumpDataset("c:\\action_film_box.txt", rsp);

        NDeleteRQ delFilmBox(uniq16odd(), UID_BASIC_FILM_BOX_SOP_CLASS, instUID);
        if (m_pdu.WriteCommand(delFilmBox, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
        {
        }
        else
        {
                AfxMessageBox("can not delte film box");
                m_pdu.Close();
                return;
        }
        if (m_pdu.Read(rsp))
        {
                AfxMessageBox("can not read delete file box information");
                m_pdu.Close();
                return;
        }
        DumpDataset("c:\\delete_film_box.txt", rsp);

        NActionRQ actionFilmSession(uniq16odd(), UID_BASIC_FILM_SESSION_STORAGE_SOP_CLASS, instUID, 1, NO_DATA_SET);
        if (m_pdu.WriteCommand(actionFilmSession, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
        {
        }
        else
        {
                AfxMessageBox("Can not action film session information");
                m_pdu.Close();
                return;
        }
        if (m_pdu.Read(rsp))
        {
                AfxMessageBox("can not read action film session information");
                m_pdu.Close();
                return;
        }
        DumpDataset("c:\\action_film_session.txt", rsp);

        NDeleteRQ delFilmSession(uniq16odd(), UID_BASIC_FILM_SESSION_STORAGE_SOP_CLASS, instUID);
        if (m_pdu.WriteCommand(delFilmSession, UID_BASIC_GRAYSCALE_PRINT_MANAGEMENT_SOP_CLASS))
        {
        }
        else
        {
                AfxMessageBox("can not delete file action information");
                m_pdu.Close();
                return;
        }
        if (m_pdu.Read(rsp))
        {
                AfxMessageBox("can not read delete file session information");
                m_pdu.Close();
                return;
        }
        DumpDataset("c:\\delete_film_session.txt", rsp);

        m_pdu.Close();
 楼主| 发表于 2007-10-8 16:48:11 | 显示全部楼层

错误之处

以上程序在测试的时候出现
AfxMessageBox("Can not get create film box feedback information");
即无法创建film box,不知道是什么原因,请问那位知道,谢谢!

(PS. 我用DICOMScope测试以上打印程序)
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表