DCMTK:简单存储服务类提供者 C/C++

C/C++ 专栏收录该内容
¥59.90 ¥99.00
230篇文章

DCMTK:简单存储服务类提供者 C/C++

DCMTK(DICOM Toolkit)是一个开源的软件包,用于处理医学影像和通信的DICOM(数字成像和通信医学)标准。其中,简单存储服务类(Simple Storage Service Class)是DCMTK提供的一个功能强大的模块,用于实现DICOM图像的存储和检索。本文将介绍如何使用DCMTK中的简单存储服务类提供者(SCP)来搭建一个DICOM图像存储服务器。

在开始之前,确保你已经安装了DCMTK并且配置了C/C++开发环境。下面是一个示例的C++代码,演示了如何使用DCMTK提供的简单存储服务类提供者来实现DICOM图像的存储服务。

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmnet/dicom.h"
DCMTK——注册图像文件的测试程序 首先,需要了解DCMTK中的dcmimgle库,该库用于处理DICOM格式的图像文件,能够读取DICOM文件并将其转换为普通图像。在此基础上,我们可以对普通图像进行各种操作,如旋转、裁剪、调整大小等。DCMTK是一个用于医学图像处理的开源工具集,其核心部件包括图像存储和转换等。本文将介绍DCMTK中的一个注册图像文件的测试程序。总结:本文介绍了DCMTK的一个注册图像文件的测试程序,通过注册图像文件,可以在DCMTK中使用各种各样的处理函数对图像进行操作。如果成功注册图像文件,我们将会看到控制台输出。 阅读详情

相关推荐

DCMTK:编写一个存储服务类提供者

在本例中,我们定义了一个名为storeCallback的回调函数,该函数将逐个处理收到的DICOM文件,并将其保存到./storage目录中。其中最重要的组件之一是DcmSCP(DICOM服务器类提供程序),该组件允许您快速创建一个DICOM服务器,以便上传、存储和检索DICOM图像。通过使用DcmSCP类,您可以快速创建一个DICOM服务器,以方便医学图像的上传、存储和检索。使用此代码,您可以轻松地创建一个非常基本的DICOM服务器,以存储和检索DICOM图像。DCMTK:编写一个存储服务类提供者。

DevPulse的博客 300

DCMTK:使用C/C++的简单存储服务类用户

在DCMTK中,有一个名为SimpleStorageServiceClass的类,它允许我们在C/C++中实现DICOM存储服务的客户端。在本文中,我们将探讨如何使用DCMTK的SimpleStorageServiceClass类来实现一个简单的DICOM存储服务客户端。接下来,我们需要创建一个SimpleStorageServiceClass的实例,并设置DICOM服务器的相关参数,例如服务器的IP地址和端口号。请注意,以上代码示例中的错误处理部分需要根据实际情况进行适当的处理。

CoderHH的博客 323

DCMTK:使用C/C++编写的存储服务类用户

在本文中,我们将探讨如何使用C/C++编写一个简单的DCMTK存储服务类用户。在我们开始编写代码之前,让我们先了解一下存储服务类是什么。存储服务类是DICOM网络通信中的一种服务类,用于将图像和相关的元数据发送到远程DICOM服务器。存储服务类用户是一个DICOM应用程序,它可以创建DICOM图像对象并将其发送到DICOM服务器。这只是一个简单的示例,DCMTK提供了更多的功能和选项来处理DICOM图像和通信。通过阅读DCMTK的官方文档和示例代码,您可以进一步了解和探索DCMTK的强大功能。

zhouKouUU的博客 189

DCMTK:C++中的DICOM存储服务提供者

在DCMTK中,存储服务类(Storage Service Class)提供了用于存储和检索DICOM图像的功能。这就是使用DCMTK库中的存储服务类(Storage Service Class)在C++中实现DICOM图像存储的基本步骤。通过设置适当的DICOM属性和调用相应的函数,我们可以轻松地将DICOM图像发送到DICOM服务器。如果与DICOM服务器的关联建立成功,我们可以开始发送DICOM图像。首先,创建一个DcmDataset对象,并将DICOM图像的属性添加到数据集中。

James_CODER的博客 637

使用DCMTK实现简单DICOM存储服务

而DCMTK(DICOM工具包)是一个开源的软件包,其中包含了许多DICOM相关的工具和库,提供了一组用于处理DICOM文件并与DICOM设备通信的C++类和工具。在本文中,我们将介绍如何使用DCMTK中的存储服务类提供者(SCP)来实现一个简单的DICOM存储服务。SCP作为DICOM服务器端的一种,负责接收DICOM图像并将其存储到本地磁盘上。然后,我们需要在类的构造函数中设置SCP的应用程序名称、版本号、监听端口号和允许的最大同时连接数。现在,我们已经实现了一个简单的DICOM存储服务。

. 750

DCMTK:易用存储服务类用户

DCMTK是一个医疗影像处理和通信的开放源代码库,提供了许多用于传输、存储、检索和操作医疗影像的工具。SSCU 提供了一个简单的 API,允许用户使用不同的协议将DICOM文件存储到DICOM存储服务类(Storage Service Class)服务器上。在上面的示例中,我们创建了一个DICOM存储服务类用户对象(DcmSCU),并设置了本地AE标题、远程主机名、远程端口号和阻塞模式。下面是一个简单的示例程序,展示了如何使用SSCU将DICOM图像上传到DICOM存储服务类服务器上。函数初始化网络连接,

PixelProX的博客 248

DCMTK:使用C/C++将XML文档转换为DICOM文件或数据集

在上面的示例中,我们将XML解析的代码放在了与创建DICOM数据集的代码一起。你可以在"// 从XML解析数据并将其添加到DICOM数据集中"的注释下方编写代码,将解析的XML数据添加到DICOM数据集中。现在,我们将XML解析和DICOM数据集创建结合起来,完成从XML到DICOM的转换。请注意,这只是一个简单的示例,用于演示如何使用DCMTK和pugixml库将XML转换为DICOM。在上面的示例中,我们使用pugixml库加载名为"input.xml"的XML文件。在上面的示例中,我们创建了一个。

TechPr的博客 238

使用DCMTK在C/C++中读取DICOM图像并添加模态LUT并将其写回

在本篇文章中,我们将使用DCMTK库在C/C++中读取DICOM图像,并通过添加模态LUT(Look-Up Table)来增强图像的可视化效果,最后将修改后的图像写回DICOM文件。在本文中,我们使用DCMTK库在C/C++中读取DICOM图像,并通过添加模态LUT来增强图像的可视化效果。请注意,DCMTK提供了丰富的功能和类,可以用于处理DICOM文件的各个方面,例如检索、修改元数据等。接下来,我们将模态LUT应用于图像,并获取修改后的图像数据。如果是单色图像,我们获取图像的宽度和高度,并创建一个新的。

TechBlitzZ的博客 454

DCMTK:用C/C++表示和操作DICOM对象

通过使用DCMTK的C/C++类,开发人员可以方便地表示和操作DICOM对象,以满足医学图像和数据处理的需求。除了读取和修改元数据外,DCMTK还提供了其他功能,如图像读取和写入、像素数据的访问和处理等。以下是一个简单的示例代码,展示了如何使用DCMTK库来读取和修改DICOM对象的元数据。上述代码中,首先需要加载DCMTK的字典,该字典用于解析DICOM数据元的名称和标签。根据DICOM标准,数据集由一系列数据元组成,每个数据元包含了与医学图像和数据相关的信息。对象,它代表了一个DICOM文件。

2301_79366106的博客 287

使用DCMTK在C/C++中从命令行修改DICOM文件

DICOM(数字化影像和通信医疗)是医学图像和相关信息的国际标准,用于在医疗领域中传输、存储和共享医学图像。DCMTK(DICOM工具包)是一个流行的开源工具包,用于处理DICOM文件。本文将介绍如何使用DCMTK在C/C++中从命令行修改DICOM文件,并提供相应的源代码示例。以上是使用DCMTK在C/C++中从命令行修改DICOM文件的基本示例。函数将修改后的DICOM文件保存到指定的输出路径。上述代码首先检查命令行参数,确保输入了输入DICOM文件和输出DICOM文件的路径。)下载并安装DCMTK。

TechProX的博客 253

深入详解开源工具DCMTK:C++开发的DICOM工具包

在医学影像处理领域,DICOM(Digital Imaging and Communications in Medicine)是标准化的格式,用于存储、传输和显示医学影像数据。DCMTK(DICOM Toolkit)是一个功能强大的开源C++库,专为处理DICOM文件和网络通信设计,广泛应用于医学影像软件开发、DICOM文件转换和分析。

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 485

DCMTK:OFCharacterEncoding的使用示例(C/C++)

OFCharacterEncoding是DCMTK库中的一个类,用于处理字符编码的转换和管理。在本文中,我们将介绍如何使用DCMTK库中的OFCharacterEncoding类来进行字符编码的转换和管理。以上是使用DCMTK库中的OFCharacterEncoding类进行字符编码转换和管理的示例。通过使用这些功能,我们可以方便地在C/C++程序中处理不同字符编码的字符串。首先,我们需要在代码中包含DCMTK库的头文件和命名空间,以便可以使用OFCharacterEncoding类和相关的函数。

TechProX的博客 228

使用DCMTK进行DICOM通信:测试DcmSCP和DcmSCU类(C/C++)

综上所述,我们介绍了如何使用DCMTK库中的DcmSCP和DcmSCU类进行DICOM通信。通过DcmSCP类,我们可以创建一个简单的DICOM服务端程序,用于接收和处理DICOM请求。通过DcmSCU类,我们可以创建一个简单的DICOM客户端程序,用于发起DICOM请求并接收响应。DICOM(医学数字成像和通信)是医疗领域中常用的标准,用于在医疗设备之间传输、存储和共享医学图像和相关信息。在本文中,我们将介绍如何使用DCMTK库中的DcmSCP和DcmSCU类进行DICOM通信,并附上相应的源代码示例。

PixelProX的博客 642

使用DCMTK实现DICOM存储服务

在上面的代码中,我们首先初始化了DCMTK库,然后创建了一个网络连接,并创建了一个DICOM数据集。接下来,我们将这个数据集发送到远程机器,使用DIMSE_storeUser函数进行存储。在本文中,我们将介绍如何使用DCMTK实现DICOM存储服务。在实际应用中,我们需要从DICOM图像中提取这些UID,并将它们作为参数传递给我们的存储服务。我们只需要创建一个DICOM数据集,并使用DIMSE_storeUser函数将其发送到远程机器即可。接下来,我们将编写C ++代码实现DICOM存储服务。

CyberNova的博客 375

掌握DICOM协议的DCMTK开源代码全面解析

DCMTK是一个由德国 OFFIS 研究所开发的开源软件库,用于实现DICOM协议及相关医学影像标准的应用程序开发。DCMTK为医疗设备和软件提供了一整套实现DICOM标准的工具和库文件,支持数据的存储、传输和打印等多种功能。医疗影像学是现代医疗体系中不可或缺的一环,它涉及到的医学图像种类繁多,包括X射线、CT、MRI、超声、核医学等。在这些图像被生成、存储和传输的过程中,一个标准化的数据交换协议显得尤为重要,以便于不同的设备之间能够无缝协作,实现影像资料的共享。

weixin_36019375的博客 1517

408计算机复试专业课问答汇总

408计算机复试专业课问答汇总

weixin_45930223的博客 3698

基于SOCKET的***网络软件的设计与实现

二、基于SOCKET的网络软件的需求。2、概要设计:画出软件系统结构图。3、详细设计:软件的详细设计,如类图、序列图、重要的算法流程图或伪代码,等等。4、实现:软件基本功能相关的截图和关键代码。

Recursions的博客 1371

Materials studio中的简单聚合物的建立及盒子的弛豫

涉及模块 Amorphous Cell-construction Forcite-caculation Build Polymers-Homopolymer

快乐学术猿 3万+

Rapid SCADA MQTT

一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau

mumanquan1的博客 3005

基于STM32开发板的USB MIDI键盘实现

在本文中,我们介绍了如何使用STM32开发板和相应的软件工具来实现USB MIDI键盘。通过配置STM32CubeMX和编写相应的源代码,我们能够将STM32开发板转换为一个功能齐全的USB MIDI设备。我们将使用STM32开发板和相应的软件工具来实现这一功能,并提供相应的源代码供参考。此时,您应该可以使用STM32开发板作为USB MIDI键盘,并在按键按下时听到相应的音符。在STM32CubeMX中,选择适当的STM32型号,并启动一个新的项目。然后,将生成的可执行文件烧录到STM32开发板中。

2301_79326616的博客 1588

【100%通过率】2024华为OD机试真题E卷 C++语言 实现【流浪地球】

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 1) 初始状态下所有的发动机都是未启动状态; 2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式; 3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”; 4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做; 5) 发动机0与发动机N-1是相邻; 地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。 哪些发动机最晚被启动呢?

MISAYAONE的博客 4208

BLDC&PMSM电机控制器硬件设计工程(三)控制器驱动芯片方案

在汽车电机控制系统中,栅极驱动IC扮演着至关重要的角色。它作为主控MCU与功率开关管(MOSFET/IGBT)之间的桥梁,将微弱的PWM信号放大为足以快速、可靠驱动功率管的强信号。本文将深入解析英飞凌、TI和NXP的车规级栅极驱动方案,重点关注半桥和单侧驱动IC。1)为什么需要栅极驱动器?栅极驱动器是低压控制器和高压电路之间的缓冲电路,用于放大控制器的控制信号,从而实现功率器件更有效的导通和关断。栅极驱动器的作用总结如下:1.将控制器的低压信号转化为更高电压的驱动信号,以实现功率器件稳定导通和关断。

小幽余生不加糖 490

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 557

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: C语言实现惯性导航初始对准的核心代码(C/C++)
下一篇: Boost.Signals2模块实现信号和槽之间参数传递的示例程序(C/C++)
普通网友
博客等级 码龄3年 138粉丝 445原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值