c#如何读取DCM图像,并获取图像信息

通过c#编写一个程序,能够读入DCM格式的图片,就是医学图像遵循DICOM标准,获取医学图像上所包含的病人信息。求大神指导。这个问题想了好久,网上有c++的例子,但是看不懂,就是没有c#的例子。求大神。

c#

2个回答

楼主,这个问题解决了吗?解决了的话可以把源代码分享吗?1431924907@qq.com

楼主,这个问题解决了吗?解决了的话可以把源代码分享吗?503819761@qq.com

谢谢!!!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求java代码实现把dcm文件里面的图像信息替换成png或jpg的图像信息,注意是生成一个新的dcm文件,只是修改dcm里面的图像信息,不是要把dcm转成png或者jpg
最近研究dcm文件重新生成一个新的dcm文件,替换掉里面的图像信息,但一直无法突破。 替换原dcm里的图像信息,比如把a.dcm里面的图像信息替换成a.png图像信息 希望能有大神帮忙解决一下。 谢谢 前提: 原片a.dcm 和一张风景图片a.png 结果: 生成一张b.dcm 把a.dcm的图像信息换成a.png的图像信息,其它病人信息不变
android读取dcm医学图像
请问下,我想在android中开发一个程序,可以读医学影像图像dcm格式的,请问大家有没有相关的代码,我记得之前在googlecode里有的,但现在访问不了!谢谢
如何解决解析DICOM文件问题实现读取.dcm文件,获取床位床宽
大体想达到这样效果过,有没有大牛如何解析医院的以.dcm的文件![图片说明](https://img-ask.csdn.net/upload/201702/28/1488268079_636636.png)
pydicom解析dcm文件生成数组时运行异常
问题:pydicom解析dcm文件,在dcm.pixel_array 生成数组时程序运行错误,想知道这样的异常怎么解决? 环境:PyCharm+python+win10 文件名称格式:1123243.3234432.a.342.dcm 问题说明:只是部分图片无法解析,并不是所有的dcm文件都会报这种异常 源代码: ``` import shutil import pydicom import os import cv2 import numpy as np def convert_file(dcm_file_path, jpg_file_path): #遍历本地文件路径 for dirs in os.listdir(dcm_file_path): #拼接成绝对路径 dirs = os.path.join(dcm_file_path,dirs) print(dirs) #用pydicom读取dcm文件 dcm = pydicom.read_file(dirs) print(dcm) #获得图像信息 img = dcm.pixel_array #程序运行到此处的时候报错 print(img) # scaled_img = cv2.convertScaleAbs( # img - np.min(img), alpha=(255.0 / min(np.max(img) - np.min(img), 10000))) # print(os.path.join(jpg_file_path,dirs,os.path.basename(dirs))) # new_filename = os.path.join(jpg_file_path, dirs, os.path.basename(dirs).split('.')[0] + '.jpg') # print(new_filename) # cv2.imwrite(new_filename, scaled_img) dstpath = r'D:\test\wandong' srcpath = r'D:\test\jpg02' convert_file(dstpath,srcpath) ``` 运行报错: No available image handler could decode this transfer syntax JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1])
如何保存一张2GB的DCM图像,putAndInsertUint8Arrar();图像为2GB时,报错提示内存不足
``` void CProcessCommDlg::OnBnClickedButtonDcm() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); DcmFileFormat fileformat; DcmDataset *pDataset = fileformat.getDataset(); CString strRawPath, strDCMPath, strTmp; strRawPath.Format("D:\\TestImg\\%d.raw",g_imgNum); strDCMPath.Format("D:\\TestImg\\%d.dcm", g_imgNum); //OFCondition oc = fileformat.loadFile(strRawPath); int imgSize = m_nImgWidth*m_nImgWidth * 2; BYTE *pRaw = nullptr; try { pRaw= new BYTE[imgSize]; memset(pRaw, 0, imgSize); //delete[]pRaw; FILE*fp = fopen(strRawPath,"r"); if (fp == NULL) { delete[]pRaw; return; } fread(pRaw,sizeof(BYTE),imgSize,fp); fclose(fp); SetDlgItemText(IDC_STATIC_STATA, "文件写完"); } catch (CMemoryException* e) { CString strErr; e->GetErrorMessage(strErr.GetBuffer(MAX_PATH), MAX_PATH, 0); AfxMessageBox(strErr); strErr.ReleaseBuffer(); return; } //if (oc.good()) { OFString strTagValue; AddDcmElements(pDataset); // 新名字 if (fileformat.getDataset()->putAndInsertString(DCM_PatientName, "John Doe").good()) { fileformat.getDataset()->findAndGetOFString(DCM_PatientName, strTagValue); cout << "Patient New Name:" << strTagValue.data() << endl; } // 修改窗宽窗位 if (fileformat.getDataset()->putAndInsertString(DCM_WindowCenter, "30000").good()) { fileformat.getDataset()->findAndGetOFString(DCM_WindowCenter, strTagValue); cout << "窗位:" << strTagValue.data() << endl; } if (fileformat.getDataset()->putAndInsertString(DCM_WindowWidth, "60000").good()) { fileformat.getDataset()->findAndGetOFString(DCM_WindowCenter, strTagValue); cout << "窗宽:" << strTagValue.data() << endl; } // 修改宽高 if (fileformat.getDataset()->putAndInsertString(DCM_Rows, "3072").good()) { fileformat.getDataset()->findAndGetOFString(DCM_Rows, strTagValue); cout << "Rows:" << strTagValue.data() << endl; } if (fileformat.getDataset()->putAndInsertString(DCM_Columns, "3072").good()) { fileformat.getDataset()->findAndGetOFString(DCM_Columns, strTagValue); cout << "Columns:" << strTagValue.data() << endl; } // 保存新的dcm OFCondition status = pDataset->putAndInsertUint8Array(DCM_PixelData, (Uint8 *)pRaw, imgSize, true); if (status.good()) { strTmp.Format("%s", status.text()); AfxMessageBox(strTmp); status = fileformat.saveFile(strDCMPath, EXS_LittleEndianExplicit); //status = fileformat.saveFile(strDCMPath, EXS_JPEGProcess14SV1TransferSyntax); if (status.bad()) { strTmp.Format("DCM file create failed,%s", status.text()); AfxMessageBox(strTmp); } } else { strTmp.Format("putAndInsertUint8Array error,%s", status.text()); AfxMessageBox(strTmp); } } delete[]pRaw; } ```
急急急 java 实现把bmp转换一个dcm文件,但是生成dcm文件却无法打开,求助.
代码如下 ``` import org.dcm4che3.data.Attributes; import org.dcm4che3.data.Tag; import org.dcm4che3.data.VR; import org.dcm4che3.io.DicomEncodingOptions; import org.dcm4che3.io.DicomOutputStream; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; public class TwoBmp2Dcm { private static byte[] buffer = new byte[54]; private static byte[] buff = new byte[8192]; private static int imageSize; private static DicomEncodingOptions encOpts = DicomEncodingOptions.DEFAULT; public static void main(String[] args) throws Exception { File file=new File("/Users/zhangdechang/Desktop/txt/timg.bmp"); File outdcm=new File("/Users/zhangdechang/Desktop/txt/998uuuu.dcm"); DataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(file))); DicomOutputStream out =new DicomOutputStream(outdcm); Attributes attrs=new Attributes(); Attributes data=new Attributes(); attrs=addMetaInformation(attrs); data=addData(data); data=readHeader(data, dis); out.writeDataset(attrs, data); out.setEncodingOptions(encOpts); out.writeHeader(Tag.PixelData, VR.OW, imageSize*2); int r; while ((r = dis.read(buff)) > 0) { out.write(buff, 0, r); } out.close(); dis.close(); } public static Attributes readHeader(Attributes attrs ,DataInputStream dis) throws Exception{ dis.read(buffer,0,54); if((buffer[0]&0xff)!=0x42&&(buffer[1]&0xff)!=0x4d){ throw new Exception("Missing BM segment in Bmp stream"); } int imageRows=byteToInt(buffer,21); int imageColumns=byteToInt(buffer,25); imageSize=byteToInt(buffer,5)-54; int biBitCount=byteTo2Int(buffer,29); attrs.setInt (Tag.SamplesPerPixel, VR.US,3); attrs.setInt(Tag.Rows, VR.US, imageColumns<0?-imageColumns:imageColumns); attrs.setInt(Tag.Columns, VR.US, imageRows); attrs.setInt(Tag.BitsAllocated, VR.US,biBitCount );//biBitCount attrs.setInt(Tag.BitsStored, VR.US,32); attrs.setInt(Tag.HighBit, VR.US, 32); attrs.setInt(Tag.PixelRepresentation, VR.US, 0); attrs.setString(Tag.PhotometricInterpretation,VR.CS, "MONOCHROME2"); //PALETTE_COLOR MONOCHROME2 attrs.setString(Tag.RescaleSlope, VR.DS, "1.0"); attrs.setString(Tag.RescaleIntercept, VR.DS, "0.0"); attrs.setString(Tag.PixelSpacing,VR.DS, "0.25/0.25"); attrs.setInt(Tag.NumberOfFrames, VR.IS, 1); return attrs; } public static Attributes addData(Attributes attrs){ attrs.setString(Tag.SpecificCharacterSet, VR.CS, "GB18030"); attrs.setString(Tag.ImageType, VR.CS, "ORIGINAL/PRIMARY/AXIAL"); attrs.setString(Tag.InstanceCreationDate, VR.DA, "20130013"); attrs.setString(Tag.InstanceCreationTime, VR.TM, "175827"); attrs.setString(Tag.SOPClassUID, VR.UI, "1.2.840.10008.5.1.4.1.1.2"); attrs.setString(Tag.SOPInstanceUID, VR.UI, "1.3.6.1.4.1.30071.6.22744165.4288391077912169.1.3"); attrs.setString(Tag.StudyDate, VR.DA, "20130803"); attrs.setString(Tag.AcquisitionDateTime, VR.DT, "20130803000000"); attrs.setString(Tag.StudyTime, VR.TM, "175532"); attrs.setString(Tag.AccessionNumber, VR.SH, "0"); attrs.setString(Tag.Modality, VR.CS, "DX"); attrs.setString(Tag.Manufacturer, VR.LO, "LargeV"); attrs.setString(Tag.StudyDescription, VR.LO, "融合扫描图像"); attrs.setString(Tag.SeriesDescription, VR.LO, "融合扫描图像"); attrs.setString(Tag.ManufacturerModelName, VR.LO, "HighRes3D"); attrs.setString(Tag.PatientName, VR.PN, "mmmm"); attrs.setString(Tag.PatientBirthDate,VR.DA,"19920720"); attrs.setString(Tag.PatientSex, VR.CS, "F"); return attrs; } public static Attributes addMetaInformation( Attributes attrs){ attrs.setString(Tag.FileMetaInformationVersion, VR.OB, ""); attrs.setString(Tag.MediaStorageSOPClassUID, VR.UI, "1.2.840.10008.5.1.4.1.1.2"); attrs.setString(Tag.MediaStorageSOPInstanceUID, VR.UI, "1.3.6.1.4.1.30071.6.22744165.4288391077912169.1.18"); attrs.setString(Tag.TransferSyntaxUID, VR.UI, "1.2.840.10008.1.2.1"); attrs.setString(Tag.ImplementationVersionName, VR.SH, "SmartVDicom1.0"); attrs.setString(Tag.ImplementationClassUID, VR.UI, "1.3.6.1.4.1.30071.6"); attrs.setString(Tag.SourceApplicationEntityTitle, VR.AE, ""); return attrs; } public static int byteToInt(byte[] bi,int end){ int a=(((int)bi[end]&0xff)<<24) ; int b=(((int)bi[end-1]&0xff)<<16) ; int c=(((int)bi[end-2]&0xff)<<8) ; int d=(int)bi[end-3]&0xff; return a+b+c+d; } public static int byteTo2Int(byte[] bi,int end){ int c=(((int)bi[end]&0xff)<<8) ; int d=(int)bi[end-1]&0xff; return c+d; } } ``` 生成的dcm文件打开报错,无法打开。 ![图片说明](https://img-ask.csdn.net/upload/201912/17/1576562077_220062.jpeg) 需要依赖的jar ``` <dependency> <groupId>com.sun.media</groupId> <artifactId>clibwrapper_jiio</artifactId> <version>1.2-pre-dr-b04</version> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-audit</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-conf-api</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-conf-core</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-conf-core-api</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-conf-dicom</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-core</artifactId> <version>5.17.0</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-emf</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-filecache</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-hl7</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-image</artifactId> <version>5.17.0</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-json</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che/dcm4che-mime --> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-mime</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-net</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che/dcm4che-net-audit --> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-net-audit</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-net-hl7</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che/dcm4che-soundex --> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-soundex</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcm2dcm</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-dcm2jpg --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcm2jpg</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-dcm2json --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcm2json</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcm2xml</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-dcmdict --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcmdict</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-dcmdir --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcmdir</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcmdump</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-dcmgen --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcmgen</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-dcmqrscp --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcmqrscp</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-dcmvalidate</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-emf2sf --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-emf2sf</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-findscu --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-findscu</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-getscu</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-hl7pix --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-hl7pix</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-hl7rcv --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-hl7rcv</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-hl7snd --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-hl7snd</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-hl72xml</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-ianscp --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-ianscp</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-ianscu</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool.ihe/dcm4che-tool-ihe-modality --> <dependency> <groupId>org.dcm4che.tool.ihe</groupId> <artifactId>dcm4che-tool-ihe-modality</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-jpg2dcm --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-jpg2dcm</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-json2dcm</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-mkkos --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-mkkos</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-movescu --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-movescu</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-mppsscp --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-mppsscp</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-mppsscu --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-mppsscu</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-prefs2xml --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-prefs2xml</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-qc --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-qc</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-qidors</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-stgcmtscu --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-stgcmtscu</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-storescp --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-storescp</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-storescu --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-storescu</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-stowrs --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-stowrs</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-syslog</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-syslogd --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-syslogd</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-wadors --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-wadors</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-wadouri --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-wadouri</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-xml2dcm</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-xml2hl7 --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-xml2hl7</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che.tool/dcm4che-tool-xml2prefs --> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-xml2prefs</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.dcm4che/dcm4che-ws-rs --> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-ws-rs</artifactId> <version>3.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.glassfish/javax.json --> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.1.4</version> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <!--<dependency>--> <!--<groupId>log4j</groupId>--> <!--<artifactId>log4j</artifactId>--> <!--<version>1.2.17</version>--> <!--</dependency>--> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!-- 倒入jar --> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-imageio</artifactId> <version>5.17.0</version> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-imageio-rle</artifactId> <version>5.17.0</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.dcm4che</groupId> <artifactId>dcm4che-imageio-opencv</artifactId> <version>5.17.0</version> <scope>runtime</scope> </dependency> <!--<dependency>--> <!--<groupId>com.sun.media</groupId>--> <!--<artifactId>jai_imageio</artifactId>--> <!--<version>1.2-pre-dr-b04</version>--> <!--<scope>runtime</scope>--> <!--</dependency>--> <dependency> <groupId>org.dcm4che.tool</groupId> <artifactId>dcm4che-tool-common</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> ```
vtk 无法读取dmc(dicom)序列图片
# 请教各位大佬,一个最简单的vtk读取序列dcm图像,编译没问题,但总是不显示图像,说是文件名或者路径错误,但路径试了好多种都不行,请教各位大佬是何原因? # ## **程序:** ![图片说明](https://img-ask.csdn.net/upload/201806/13/1528875681_374736.png) ## **运行结果:** ![图片说明](https://img-ask.csdn.net/upload/201806/13/1528875740_931696.png) ## **图片地址:** ![图片说明](https://img-ask.csdn.net/upload/201806/13/1528875788_912410.png) # 求各位大佬帮忙!
如何生成一张2GB的DCM图像,使用DCMTK,putAndInsertUint8Array()时,提示virtual memory exhaust?
void CProcessCommDlg::OnBnClickedButtonDcm() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); DcmFileFormat fileformat; DcmDataset *pDataset = fileformat.getDataset(); CString strRawPath, strDCMPath, strTmp; strRawPath.Format("D:\\TestImg\\%d.raw",g_imgNum); strDCMPath.Format("D:\\TestImg\\%d.dcm", g_imgNum); //OFCondition oc = fileformat.loadFile(strRawPath); int imgSize = m_nImgWidth*m_nImgWidth * 2; BYTE *pRaw = nullptr; try { pRaw= new BYTE[imgSize]; memset(pRaw, 0, imgSize); //delete[]pRaw; FILE*fp = fopen(strRawPath,"r"); if (fp == NULL) { delete[]pRaw; return; } fread(pRaw,sizeof(BYTE),imgSize,fp); fclose(fp); SetDlgItemText(IDC_STATIC_STATA, "文件写完"); } catch (CMemoryException* e) { CString strErr; e->GetErrorMessage(strErr.GetBuffer(MAX_PATH), MAX_PATH, 0); AfxMessageBox(strErr); strErr.ReleaseBuffer(); return; } //if (oc.good()) { OFString strTagValue; AddDcmElements(pDataset); // 新名字 if (fileformat.getDataset()->putAndInsertString(DCM_PatientName, "John Doe").good()) { fileformat.getDataset()->findAndGetOFString(DCM_PatientName, strTagValue); cout << "Patient New Name:" << strTagValue.data() << endl; } // 修改窗宽窗位 if (fileformat.getDataset()->putAndInsertString(DCM_WindowCenter, "30000").good()) { fileformat.getDataset()->findAndGetOFString(DCM_WindowCenter, strTagValue); cout << "窗位:" << strTagValue.data() << endl; } if (fileformat.getDataset()->putAndInsertString(DCM_WindowWidth, "60000").good()) { fileformat.getDataset()->findAndGetOFString(DCM_WindowCenter, strTagValue); cout << "窗宽:" << strTagValue.data() << endl; } // 修改宽高 if (fileformat.getDataset()->putAndInsertString(DCM_Rows, "3072").good()) { fileformat.getDataset()->findAndGetOFString(DCM_Rows, strTagValue); cout << "Rows:" << strTagValue.data() << endl; } if (fileformat.getDataset()->putAndInsertString(DCM_Columns, "3072").good()) { fileformat.getDataset()->findAndGetOFString(DCM_Columns, strTagValue); cout << "Columns:" << strTagValue.data() << endl; } // 保存新的dcm OFCondition status = pDataset->putAndInsertUint8Array(DCM_PixelData, (Uint8 *)pRaw, imgSize, true); if (status.good()) { strTmp.Format("%s", status.text()); AfxMessageBox(strTmp); status = fileformat.saveFile(strDCMPath, EXS_LittleEndianExplicit); //status = fileformat.saveFile(strDCMPath, EXS_JPEGProcess14SV1TransferSyntax); if (status.bad()) { strTmp.Format("DCM file create failed,%s", status.text()); AfxMessageBox(strTmp); } } else { strTmp.Format("putAndInsertUint8Array error,%s", status.text()); AfxMessageBox(strTmp); } } delete[]pRaw; }
关于ITK读取dicom文件的问题(multi-dicom)
想请教一下大牛,关于ITK读取multi-dicom文件的方法,itk给的例子只是读取dicom序列图像,只是一个dicom文件中只有一个图像,我现在的数据源是一个dicom文件里有320张图像,即扫描一次得到的数据,那么ITK该怎么读取呢,用例子给的方法读取是会出错的。 一个dcm文件不只是头信息+一张图片,这个文件中包含了一个序列的图,我现在就是不知道怎么用ITK去读这种类型的dcm文件,普通的dcm我是可以读的因为他们是单独的一个文件一个图,一个序列就是多个dcm。
DICOM C-STORE测试 storescu发送DCM文件到storescp的失败错误
我用DCMTK工具包里面的storescp和storescu模拟发送DCM文件的发送, 结果发送失败,报错。我的dcm文件可以用MicroDicom打开查看。报错内容如下: W: DIMSE Warning: (STORESCU,ANY-SCP): sendMessage: unable to convert dataset fro m 'JPEG Baseline' transfer syntax to 'Little Endian Explicit' E: Store Failed, file: C:\DICOM\Source\dump2dcm\temp.dcm: E: 0006:020e DIMSE Failed to send message E: Store SCU Failed: 0006:020e DIMSE Failed to send message I: Aborting Association![图片说明](https://img-ask.csdn.net/upload/201705/05/1493954000_196945.png)
关于android打开dcm图片时候的问题
本人在做一个医疗项目的时候遇到一个难题,需求是在移动端设备上显示医学的dcm图片。在github上找了dcm4che这个开源库的demo,只能解析没有压缩过的dcm图片,请问一下如何用dcm4che如何解析压缩过的dcm图片,或者用其他开源库可以实现,万分谢谢!!
怎么用dcm4che 把dcm格式的图片转成jpg格式啊?
我的代码如下: ``` import java.io.File; import java.io.IOException; import org.dcm4che3.tool.dcm2jpg.Dcm2Jpg; import org.junit.Test; public class TestDcm2jpg { @Test public void testDcm2jpg2(){ try{ File src = new File("E:/影像实例/1/1.2.392.200036.9123.100.11.12.200000000.2013052710593606.dcm"); File dest = new File("E:/影像实例/1/1.2.392.200036.9123.100.11.12.200000000.2013052710593606.jpg"); Dcm2Jpg dcm2jpg= new Dcm2Jpg(); dcm2jpg.convert(src, dest); System.out.println("Completed"); } catch(IOException e){ e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } } } ``` 运行的时候抛了空指针错误: ``` java.lang.NullPointerException at org.dcm4che3.tool.dcm2jpg.Dcm2Jpg.writeImage(Dcm2Jpg.java:402) at org.dcm4che3.tool.dcm2jpg.Dcm2Jpg.convert(Dcm2Jpg.java:364) at com.boco.test.dcm2jpg.TestDcm2jpg.testDcm2jpg2(TestDcm2jpg.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) ```
tiff文件转格式,希望转成dcm格式的
//TIFFSetDirectory(tiff,0);//我们打开第一幅图,也就是第0帧,如果是第1帧,第二个参数写1,由此类推。因为Windows下图像基本//操作都是以BMP格式进行,我们读出该帧并转成BMP格式。 char* szFileName = "C:\\Users\\Administrator\\Desktop\\test.tiff"; TIFF* tiff = TIFFOpen(szFileName, "r"); //打开Tiff文件,得到指针,以后所有的操作都通过指针进行 int nTotalFrame = TIFFNumberOfDirectories(tiff); //得到图像的总帧数 char *dtitle; // TIFFGetField(tiff,TIFFTAG_PAGENAME,&dtitle); //得到该帧的名字,存放在dtitle中。 int width,height; TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &width); //得到宽度 TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &height);//得到高度 float resolution = max(width,height); uint16 bitspersample = 1; uint16 samplesperpixel = 1; TIFFGetField(tiff, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); //每个像素占多少机器字,24位图samplesperpixel应该等于3。 TIFFGetField(tiff, TIFFTAG_BITSPERSAMPLE, &bitspersample); //每一个机器字长,这里应为8。 uint16 bitsperpixel = bitspersample * samplesperpixel; //算出每个像素占多少bit,24位图,值为24 DWORD dwBytePerLine = (width*bitsperpixel+31)/32 *4; //由上面几个参数算出图像每行所占字节(BYTE)数。 DWORD64 dwLeng = height*dwBytePerLine;//在内存里存放这帧图像数据所需要的长度 BYTE* pData = new BYTE[dwLeng]; //为存放数据分配内存空间 uint32* raster; uint32 *row; raster = (uint32*)_TIFFmalloc(width * height * sizeof (uint32)); TIFFReadRGBAImage(tiff, width, height, (uint32*)raster, 0); //以上几行读出该帧数据,保存到raster中。 row = &raster[0]; LPBYTE bits2 = pData; for (int y = 0; y < height; y++) { LPBYTE bits = bits2; for (int x = 0; x < width; x++) { *bits++ = (BYTE)TIFFGetB(row[x]); *bits++ = (BYTE)TIFFGetG(row[x]); *bits++ = (BYTE)TIFFGetR(row[x]); } row += width; bits2 += dwBytePerLine; } _TIFFfree(raster); 这样出来的图像数据不对,只有一部分,啥原因啊
关于ImageMagick在windows下处理dcm图片的问题
各位大神,本人最近遇到一个问题,特来请教。需求:处理dcm(dicom3.0标准)图片,压缩到100K左右的web格式,转换为jpg,用java代码来操作。在linux上用ImageMagick来处理是可以用的,因为各种library加上之后,重新编译就可以运行成功,但现在业务上的需求是用java写一个客户端在客户的电脑上运行,一般说来是windows系统(xp更多),这个客户端直接在客户电脑上压缩和转换dcm图片为jpg(用im4java来调用ImageMagick),现在的关键是我用ImageMagick来处理windows上的业务,发现报下面的错: C:\Program Files\ImageMagickQ16>identify.exe d:/2.dcm identify.exe: Unsupported JPEG process: SOF type 0xc3 `C:/Users/ADMINI~1/AppData /Local/Temp/magick-5416xkOfuXpYb7Wx' @ error/jpeg.c/JPEGErrorHandler/319. 在国外的论坛上问到了原因,是因为缺少无损jpeg的支持库,可是在windows下面我要如何才能加入lossless JPEG的支持?搞了好久也不知道怎么办,求教各种如果用java来处理dcm,或者如果用 ImageMagick在windows上处理高清的dcm文件。 附件里面附一个测试用的文件吧,这个文件请各位不要流传,是真实的医用ct片。谢谢各位了。 附件:http://dl.iteye.com/topics/download/7caac864-675a-3394-941a-c758f18bc15e 或 :http://url.cn/MEqp2A 谢谢各位了
各位会用dcmtk转图片的大佬麻烦帮小弟试下我这压缩后的dcm文件能不能转图片
我是做java的,用过dcm4che2转不了,还请大佬帮忙 [dcm下载地址](http://112.74.41.176/group1/M00/00/08/rBJ6SVpTV16AFD1oAGuVckTXai8693.dcm "")
DTI数据DICOM格式转换
我用的是GE的机器,从PACS上导出的DTI的原始数据,用dcm2nii转格式的时候,只有nii的文件,没有bvec和bval两个文件,不知道问题出在哪里,谁能帮我解决这个?
萌新求助,C语言5户共井问题
#include<stdio.h> /*5户共井问题。有A,B,C,D,E 5家人共有一口井,已知井深不超过10m。 A,B,C,D,E 5家人的井绳长各不相同,从井口放下绳索正好到达水面时, (a) 需要A家的绳2条接上B家的绳1条; (b) 需要B家的绳3条接上C家的绳1条; (c) 需要C家的绳4条接上D家的绳1条; (d) 需要D家的绳5条接上E家的绳1条; (e) 需要E家的绳6条接上A家的绳1条。 问井深和各家绳长。*/ int main() { int a,b,c,d,e,L; //设A,B,C,D,E的绳长分别为a,b,c,d,e,井深为L(不超过10m)。10m=1000cm //2*a+b=L; 3*b+c=L; 4*c+d=L; 5*d+e=L; 6*e+a=L; 绳长与井深之间的关系式 L=500; do { a=(L*265)/721;b=L-2*a;c=L-3*b;d=L-4*c;e=L-5*d; if((L-6*e)<a) L=L-1; else L=L+1; } while ((L-6*e)!=a); printf("a=%dcm b=%dcm c=%dcm d=%dcm e=%dcm L=%dcm\n",a,b,c,d,e,L); return 0; }
matlab里面有自带的.dcm格式的图片吗,直接调用matlab里面的图片该怎么编程?
.dcm格式的图片怎么得到啊。matlab里面有吗,还有,可不可以直接调用matlab里面的图片,我按照网上说的途经(matlab/toolbox/images/imdemos)找,里面都是一些.m或者.p文件,是要打开运行的吗?
在python中用itk插值后的数据怎么保存成dcm格式?
请问一下,在python中用itk插值后的数据怎么再通过pipeline结构进行处理,怎么保存成dcm的格式的图片呢? itk插值的过程代码如下: import SimpleITK as sitk reader = sitk.ImageSeriesReader() dicom_names = reader.GetGDCMSeriesFileNames(case_path) reader.SetFileNames(dicom_names) image = reader.Execute() resample = sitk.ResampleImageFilter() resample.SetOutputDirection(image.GetDirection()) resample.SetOutputOrigin(image.GetOrigin()) newspacing = [1, 1, 1] resample.SetOutputSpacing(newspacing) newimage = resample.Execute(image)
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问