<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>C/C&#43;&#43; on G. T. Wang</title>
    <link>https://blog.gtwang.org/categories/c/c&#43;&#43;/</link>
    <description>Recent content in C/C&#43;&#43; on G. T. Wang</description>
    <generator>Hugo -- 0.162.0</generator>
    <language>zh-tw</language>
    <copyright>G. T. Wang</copyright>
    <lastBuildDate>Tue, 20 Dec 2022 19:46:15 +0800</lastBuildDate>
    <atom:link href="https://blog.gtwang.org/categories/c/c++/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>C&#43;&#43; 語言使用 Crypto&#43;&#43; 實作 RSA 數位簽章教學與範例</title>
      <link>https://blog.gtwang.org/programming/cpp-cryptopp-rsa-signature-scheme-tutorial-examples/</link>
      <pubDate>Tue, 20 Dec 2022 19:46:15 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-cryptopp-rsa-signature-scheme-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C++ 語言中使用 &lt;a href=&#34;https://cryptopp.com/&#34;&gt;Crypto++ 加密函式庫&lt;/a&gt;，實作 RSA 數位簽章的簽署與驗證。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;在使用 Crypto++ 函式庫之前，請先確認系統上有安裝好該函式庫，Ubuntu Linux 可以參考 &lt;a href=&#34;https://blog.gtwang.org/programming/ubuntu-linux-install-cryptopp-cryptography-library-tutorial-examples/&#34;&gt;Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學&lt;/a&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 語言使用 Crypto&#43;&#43; 實作 RSA-OAEP 搭配 SHA256 加密教學與範例</title>
      <link>https://blog.gtwang.org/programming/cpp-cryptopp-rsa-oaep-sha256-encryption-decryption-scheme-tutorial-examples/</link>
      <pubDate>Mon, 19 Dec 2022 20:22:15 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-cryptopp-rsa-oaep-sha256-encryption-decryption-scheme-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C++ 語言中使用 &lt;a href=&#34;https://cryptopp.com/&#34;&gt;Crypto++ 加密函式庫&lt;/a&gt;，以 RSA OAEP 搭配 SHA256 雜湊實作資料加密與解密。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;在使用 Crypto++ 函式庫之前，請先確認系統上有安裝好該函式庫，Ubuntu Linux 可以參考 &lt;a href=&#34;https://blog.gtwang.org/programming/ubuntu-linux-install-cryptopp-cryptography-library-tutorial-examples/&#34;&gt;Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學&lt;/a&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 語言使用 Crypto&#43;&#43; 實作 AES 加密、解密、認證加密教學與範例</title>
      <link>https://blog.gtwang.org/programming/cpp-cryptopp-aes-encryption-decryption-aead-tutorial-examples/</link>
      <pubDate>Thu, 15 Dec 2022 10:43:22 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-cryptopp-aes-encryption-decryption-aead-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C++ 語言中使用 &lt;a href=&#34;https://cryptopp.com/&#34;&gt;Crypto++ 函式庫&lt;/a&gt;實作 AES-CBC 加密與解密，以及 AES-GCM 認證加密（AE）與帶有關聯資料的認證加密（AEAD）。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;在使用 Crypto++ 函式庫之前，請先確認系統上有安裝好該函式庫，Ubuntu Linux 可以參考 &lt;a href=&#34;https://blog.gtwang.org/programming/ubuntu-linux-install-cryptopp-cryptography-library-tutorial-examples/&#34;&gt;Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學&lt;/a&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu Linux 安裝、使用 Crypto&#43;&#43; 加密函式庫教學與範例</title>
      <link>https://blog.gtwang.org/programming/ubuntu-linux-install-cryptopp-cryptography-library-tutorial-examples/</link>
      <pubDate>Mon, 12 Dec 2022 19:06:30 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/ubuntu-linux-install-cryptopp-cryptography-library-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Ubuntu Linux 系統中安裝 Crypto++ 加密函式庫，並編譯使用 Crypto++ 的 C++ 程式碼。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://www.cryptopp.com/&#34;&gt;Crypto++&lt;/a&gt;（亦稱 CryptoPP、libcrypto++ 或 libcryptopp）是一套開放原始碼的 C++ 密碼學函式庫，除了完整支援常見的演算法之外，Crypto++ 也包含了較冷門、較少被使用的演算法，目前已廣泛被學術界與業界使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-openssl-ecdh-implementation-tutorial-examples/</link>
      <pubDate>Fri, 09 Dec 2022 11:26:01 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-openssl-ecdh-implementation-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C 語言中使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;產生橢圓曲線金鑰對&#34;&gt;產生橢圓曲線金鑰對&lt;/h2&gt;
&lt;p&gt;在實作橢圓曲線 ECDH 金鑰交換之前，要先產生兩對橢圓曲線的金鑰對，以下是以 C 語言程式的方式來產生金鑰的範例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言使用 OpenSSL 實作 PBKDF2 教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-openssl-pbkdf2-hmac-implementation-tutorial-examples/</link>
      <pubDate>Thu, 08 Dec 2022 11:15:41 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-openssl-pbkdf2-hmac-implementation-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C 語言中使用 OpenSSL 函式庫實作各種 PBKDF2 密鑰延伸演算法。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;PBKDF2（Password-Based Key Derivation Function）是一種密鑰延伸（key stretching）演算法，透過反覆的大量運算，降低密鑰產生的速度，讓暴力破解的難度變高。實務上 PBKDF2 會搭配 SHA1、SHA256、SHA512 等雜湊演算法，以下是以 OpenSSL 函式庫實作的 C 語言範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言使用 OpenSSL 實作 AES 加密、解密教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-openssl-aes-encryption-and-decryption-tutorial-examples/</link>
      <pubDate>Tue, 06 Dec 2022 19:10:59 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-openssl-aes-encryption-and-decryption-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C 語言程式中使用 OpenSSL 函式庫，以 AES 對稱式加密演算法實作資料的加密與解密。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;安裝-openssl-函式庫&#34;&gt;安裝 OpenSSL 函式庫&lt;/h2&gt;
&lt;p&gt;若在 Ubuntu Linux 中，可以使用 &lt;code&gt;apt&lt;/code&gt; 安裝 OpenSSL 函式庫與編譯相關套件：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 程式語言 std::set 集合容器用法教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-cpp-stl-std-set-tutorial-examples/</link>
      <pubDate>Tue, 29 Jun 2021 11:01:31 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-cpp-stl-std-set-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C++ 程式中使用標準程式庫的 &lt;code&gt;set&lt;/code&gt; 儲存集合的資料。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;stdset-簡介&#34;&gt;&lt;code&gt;std::set&lt;/code&gt; 簡介&lt;/h2&gt;
&lt;p&gt;C++ 標準函式庫中的 &lt;code&gt;set&lt;/code&gt; 可以用來儲存集合的資料，&lt;code&gt;set&lt;/code&gt; 裡面的元素都是唯一的，不可以重複，可以新增或刪除元素，但不可以修改元素的值。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 程式語言 std::map 儲存鍵值對應用法教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-cpp-stl-std-map-tutorial-examples/</link>
      <pubDate>Mon, 28 Jun 2021 15:47:00 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-cpp-stl-std-map-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C++ 程式中使用標準程式庫的 map 處理鍵值對應（key-value）的資料。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;stdmap-簡介&#34;&gt;&lt;code&gt;std::map&lt;/code&gt; 簡介&lt;/h2&gt;
&lt;p&gt;C++ 標準函式庫中的 &lt;code&gt;std::map&lt;/code&gt; 可以用來儲存一對一鍵值對應的資料，例如姓名對應年紀的資料。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cppcheck：C/C&#43;&#43; 靜態程式碼分析工具使用教學與範例</title>
      <link>https://blog.gtwang.org/programming/cppcheck-c-cpp-static-analysis-tool-tutorial-examples/</link>
      <pubDate>Sun, 02 May 2021 14:22:32 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cppcheck-c-cpp-static-analysis-tool-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Linux 中使用 Cppcheck 靜態程式碼分析工具檢查，偵測 C/C++ 程式的臭蟲。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://cppcheck.sourceforge.net/&#34;&gt;Cppcheck&lt;/a&gt; 是一個適用於 C/C++ 程式碼的靜態分析工具，可以偵測程式碼中的臭蟲（bugs）以及不合理的異常程式結構，其設計原則為低偽陽性（false positives），亦可用於非標準的語法結構（例如嵌入式專案）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 樣條曲線 BSpline 非剛性影像對準教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-bspline-non-rigid-registration-tutorial-examples/</link>
      <pubDate>Thu, 24 Dec 2020 18:49:59 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-bspline-non-rigid-registration-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 ITK 的樣條曲線（BSpline）轉換對 2D 影像進行非剛性影像對準。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;這個範例中使用 &lt;code&gt;BSplineTransform&lt;/code&gt; 轉換對 2D 的影像進行非剛性影像對準（non-rigid image registration），由於樣條曲線（BSpline）轉換的參數數量很龐大，所以這個例子中採用 &lt;code&gt;LBFGSOptimizerv4&lt;/code&gt; 而不用普通的 &lt;code&gt;RegularStepGradientDescentOptimizer&lt;/code&gt; 或 &lt;code&gt;ConjugateGradientLineSearchOptimizer&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 有限元素法影像對準 FEM Registration 教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-fem-based-deformable-image-registration-tutorial-examples/</link>
      <pubDate>Thu, 17 Dec 2020 18:11:52 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-fem-based-deformable-image-registration-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹 ITK 所提供的有限元素法影像對準的使用方式，並提供基本的範例程式碼。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;有限元素法影像對準&#34;&gt;有限元素法影像對準&lt;/h2&gt;
&lt;p&gt;以下是使用 ITK 的有限元素法（finite element method，簡稱 FEM）影像對準的基礎範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 多階段 Multi-Stage 影像對準架構教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-multi-stage-registration-framework-tutorial-examples/</link>
      <pubDate>Thu, 10 Dec 2020 15:06:06 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-multi-stage-registration-framework-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 ITK 的多階段（multi-stage）影像對準架構下，組合平移對準（translation registration）與仿射對準（affine registration）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 多層級 Multi-Resolution 影像對準架構教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-multi-resolution-registration-framework-tutorial-examples/</link>
      <pubDate>Mon, 07 Dec 2020 15:29:17 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-multi-resolution-registration-framework-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 ITK 的多層級（multi-resolution）影像對準架構下，進行線性仿射影像對準（affine registration）。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 使用 VTK 讀取 DICOM 影像教學與範例</title>
      <link>https://blog.gtwang.org/programming/python-vtk-read-dicom-image-series-tutorial-examples/</link>
      <pubDate>Sun, 29 Nov 2020 17:39:05 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/python-vtk-read-dicom-image-series-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Python 中使用 VTK 函式庫讀取 DICOM 影像。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;vtkdicomimagereader-讀取單一檔案-dicom-影像&#34;&gt;&lt;code&gt;vtkDICOMImageReader&lt;/code&gt; 讀取單一檔案 DICOM 影像&lt;/h2&gt;
&lt;p&gt;若要以 VTK 讀取單一檔案的 DICOM 影像，可以使用 &lt;code&gt;vtkDICOMImageReader&lt;/code&gt; 並指定檔案位置即可：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;vtk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 建立 vtkDICOMImageReader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dicomReader&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vtk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vtkDICOMImageReader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 指定 DICOM 檔案&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dicomReader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SetFileName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;myfile.dcm&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 讀取 DICOM 影像&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dicomReader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 取得 DICOM 影像&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dicomReader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetOutput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 顯示影像資訊&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Scalar Type:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetScalarTypeAsString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Origin:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetOrigin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Extend:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetExtent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Spacing:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetSpacing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;vtkdicomimagereader-讀取-dicom-影像序列&#34;&gt;&lt;code&gt;vtkDICOMImageReader&lt;/code&gt; 讀取 DICOM 影像序列&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;vtkDICOMImageReader&lt;/code&gt; 亦可用於讀取 DICOM 影像序列，只要指定 DICOM 序列檔案的所在目錄即可：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visual Studio 2019 建立 DLL 動態連結函式庫教學與範例</title>
      <link>https://blog.gtwang.org/programming/visual-studio-2019-create-dll-files-tutorial-examples/</link>
      <pubDate>Sat, 07 Nov 2020 14:44:34 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/visual-studio-2019-create-dll-files-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 Visual Studio 2019 將自己撰寫的 C++ 程式編譯成 DLL 動態連結函式庫。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;建立-dll-動態連結函式庫&#34;&gt;建立 DLL 動態連結函式庫&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;block-label&#34;&gt;Step 1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;開啟 Visual Studio 2019，點選「建立新的專案」。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;建立新專案&#34; loading=&#34;lazy&#34; src=&#34;https://blog.gtwang.org/programming/visual-studio-2019-create-dll-files-tutorial-examples/visual-studio-create-dll-files-tutorial-examples-20201106-01.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;block-label&#34;&gt;Step 2&lt;/span&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 使用 BinaryMask3DMeshSource 將二元影像轉為 Surface 教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-binarymask3dmeshsource-convert-binary-volume-to-surface-tutorial-examples/</link>
      <pubDate>Wed, 04 Nov 2020 19:49:38 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-binarymask3dmeshsource-convert-binary-volume-to-surface-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 ITK 的 &lt;code&gt;BinaryMask3DMeshSource&lt;/code&gt; 將二元影像（binary image）轉為網格（mesh）構成的 surface。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;blockquote class=&#34;tldr&#34;&gt;&lt;p&gt;&lt;strong&gt;相關文章：&lt;/strong&gt;&lt;br&gt;
&lt;a href=&#34;https://blog.gtwang.org/programming/itk-trianglemeshtobinaryimagefilter-convert-surface-to-binary-volume-tutorial-examples/&#34;&gt;ITK 使用 TriangleMeshToBinaryImageFilter 將 Surface 轉為二元影像教學與範例&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://blog.gtwang.org/python/vtk-smoothdiscretemarchingcubes-convert-binary-volume-to-mesh-surface-tutorial-examples/&#34;&gt;VTK 使用 vtkDiscreteMarchingCubes 將二元遮罩影像轉為 Mesh 網格教學與範例&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>POCO 多功能 C&#43;&#43; 函式庫使用教學與範例</title>
      <link>https://blog.gtwang.org/programming/poco-c-libraries-installation-tutorial-examples/</link>
      <pubDate>Sun, 18 Oct 2020 17:34:06 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/poco-c-libraries-installation-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Ubuntu Linux 中安裝與使用 POCO C++ 函式庫。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://pocoproject.org/&#34;&gt;POCO&lt;/a&gt; 是一套多功能的跨平台 C++ 函式庫，可用於開發各類型平台上的網路相關應用程式，以下是在 Ubuntu Linux 中安裝 POCO 函式庫的方式與使用範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Boost 函式庫 Gzip Filter 串流壓縮教學與範例</title>
      <link>https://blog.gtwang.org/programming/boost-library-gzip-filter-stream-compression-tutorial-examples/</link>
      <pubDate>Fri, 16 Oct 2020 19:26:21 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/boost-library-gzip-filter-stream-compression-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 C++ 程式中使用 Boost 函式庫的 gzip filter 進行串流資料的壓縮與解壓縮。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;安裝-boost-函式庫&#34;&gt;安裝 Boost 函式庫&lt;/h2&gt;
&lt;p&gt;在 Ubuntu Linux 中可以直接使用 &lt;code&gt;apt&lt;/code&gt; 安裝 Boost 函式庫。安裝時可以將整套 Boost 的所有元件一次裝好：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; AWS SDK 以 S3 TransferManager 開發串流下載程式教學與範例</title>
      <link>https://blog.gtwang.org/programming/aws-sdk-cpp-s3-transfer-manager-streaming-download-tutorial-examples/</link>
      <pubDate>Fri, 16 Oct 2020 14:39:25 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/aws-sdk-cpp-s3-transfer-manager-streaming-download-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 C++ AWS SDK 中的 S3 &lt;code&gt;TransferManager&lt;/code&gt; 開發 object 下載程式，以串流寫入檔案。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;s3-transfermanager-串流下載&#34;&gt;S3 &lt;code&gt;TransferManager&lt;/code&gt; 串流下載&lt;/h2&gt;
&lt;p&gt;以下是以 &lt;a href=&#34;https://github.com/aws/aws-sdk-cpp/tree/master/aws-cpp-sdk-transfer&#34;&gt;TransferManager&lt;/a&gt; 來自動處理 S3 下載流程的範例程式。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;aws/s3/S3Client.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;aws/core/Aws.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;aws/core/auth/AWSCredentialsProvider.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;aws/transfer/TransferManager.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;fstream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ALLOCATION_TAG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;S3_DOWNLOAD&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SDKOptions&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InitAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 自訂 S3 End Point
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endPoint&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;YOUR.END.POINT&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// S3 Bucket 名稱
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bucketName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;YOUR_BUCKET&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Object 名稱
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;objectName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;CentOS-7-x86_64-Everything-1810.iso&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 檔案名稱
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;downloadFileName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;objectName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 認證資訊
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;accessKey&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;ASFHDGN345JGS436FG53&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;secretKey&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;45G54d4cbGDF56bnFsfdgh489dfGHDdfgDFGHs4e&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 建立 S3 Client
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ClientConfiguration&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;verifySSL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s3Client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MakeShared&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;S3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;S3Client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ALLOCATION_TAG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AWSCredentials&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accessKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;secretKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 設定 S3 End Point
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;s3Client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OverrideEndpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endPoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 建立 TransferManagerConfiguration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sdk_client_executor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MakeShared&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Utils&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Threading&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DefaultExecutor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ALLOCATION_TAG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Transfer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TransferManagerConfiguration&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;transferConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sdk_client_executor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;transferConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s3Client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s3Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 下載進度回呼函數
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;transferConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;downloadProgressCallback&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Transfer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TransferManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Transfer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TransferHandle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Download Progress: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetBytesTransferred&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; of &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetBytesTotalSize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; bytes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 建立 TransferManager
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;transferManager&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Transfer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TransferManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;transferConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 下載 Object
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;transferHandle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;transferManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DownloadFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucketName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;objectName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;](){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;New&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FStream&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ALLOCATION_TAG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;downloadFileName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ios_base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ios_base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;binary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 等待下載
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;transferHandle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WaitUntilFinished&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;Aws&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ShutdownAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此程式碼要配合以下 &lt;code&gt;CMakeLists.txt&lt;/code&gt; 設定，以 CMake 來編譯：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 的 AWS SDK 開發套件使用教學與範例</title>
      <link>https://blog.gtwang.org/programming/aws-sdk-cpp-installation-tutorial-examples/</link>
      <pubDate>Fri, 16 Oct 2020 09:41:28 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/aws-sdk-cpp-installation-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何安裝與使用 C++ 的 AWS 開發套件，開發 AWS 服務相關的 C++ 應用程式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/tw/sdk-for-cpp/&#34;&gt;C++ 的 AWS 開發套件（SDK）&lt;/a&gt;可讓開發者在 C++ 語言中使用 AWS 的各種服務，開發整合式的 C++ 應用程式。本篇測試環境為 Ubuntu Linux 18.04。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 使用 TriangleMeshToBinaryImageFilter 將 Surface 轉為二元影像教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-trianglemeshtobinaryimagefilter-convert-surface-to-binary-volume-tutorial-examples/</link>
      <pubDate>Sat, 26 Sep 2020 08:33:31 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-trianglemeshtobinaryimagefilter-convert-surface-to-binary-volume-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 ITK 的 &lt;code&gt;TriangleMeshToBinaryImageFilter&lt;/code&gt; 將網格（mesh）包圍的範圍轉為二元影像（binary image）。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;blockquote class=&#34;tldr&#34;&gt;&lt;p&gt;&lt;strong&gt;相關文章：&lt;/strong&gt;&lt;br&gt;
&lt;a href=&#34;https://blog.gtwang.org/programming/itk-binarymask3dmeshsource-convert-binary-volume-to-surface-tutorial-examples/&#34;&gt;ITK 使用 BinaryMask3DMeshSource 將二元影像轉為 Surface 教學與範例&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://blog.gtwang.org/python/vtk-smoothdiscretemarchingcubes-convert-binary-volume-to-mesh-surface-tutorial-examples/&#34;&gt;VTK 使用 vtkDiscreteMarchingCubes 將二元遮罩影像轉為 Mesh 網格教學與範例&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 使用 MeshFileReader 讀取 OBJ 檔案教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-meshfilereader-read-obj-file-tutorial-examples/</link>
      <pubDate>Mon, 07 Sep 2020 10:39:40 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-meshfilereader-read-obj-file-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 ITK 的 MeshFileReader 讀取 OBJ 網格檔案。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;python-讀取-obj-檔案&#34;&gt;Python 讀取 OBJ 檔案&lt;/h2&gt;
&lt;p&gt;若在 Python 中，可以使用 &lt;code&gt;itk&lt;/code&gt; 模組的 &lt;code&gt;MeshFileReader&lt;/code&gt; 來讀取 OBJ 檔案：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;itk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 設定 Mesh 資料型態（浮點數、維度 3）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;meshType&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;itk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Mesh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;itk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 建立 Mesh Reader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;meshReader&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;itk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MeshFileReader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;meshType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;New&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 設定 MeshIO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;meshIO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;itk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OBJMeshIO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;New&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;meshReader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SetMeshIO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;meshIO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 指定 OBJ 檔案名稱&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;meshReader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SetFileName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;my_mesh.obj&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 實際讀取 OBJ 檔案&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;meshReader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 取得 Mesh 內容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mesh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;meshReader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetOutput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;c-讀取-obj-檔案&#34;&gt;C++ 讀取 OBJ 檔案&lt;/h2&gt;
&lt;p&gt;若要在 C++ 讀取 OBJ 檔案，可以使用 &lt;code&gt;itk::MeshFileReader&lt;/code&gt;：&lt;/p&gt;</description>
    </item>
    <item>
      <title>VTK 視覺化工具 C&#43;&#43; 程式 Hello World 編譯教學與範例</title>
      <link>https://blog.gtwang.org/programming/vtk-visualization-toolkit-cpp-language-hello-world-tutorial-examples/</link>
      <pubDate>Tue, 16 Jun 2020 07:17:53 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/vtk-visualization-toolkit-cpp-language-hello-world-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Ubuntu Linux 中建立 VTK 應用程式開發環境，撰寫 VTK 的 hello world 程式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://vtk.org/&#34;&gt;VTK（Visualization Toolkit）&lt;/a&gt;是 Kitware 公司所發展的一套開放原始碼的 3D 繪圖函式庫，可用於各領域的三維科學資料處理與顯示，以下是在 Ubuntu Linux 中建立 VTK 應用程式的基本流程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言 TIFF 函式庫讀取 TIFF 影像與後設資料教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-libtiff-library-read-tiff-image-metadata-tutorial-examples/</link>
      <pubDate>Sun, 07 Jun 2020 18:15:17 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-libtiff-library-read-tiff-image-metadata-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 &lt;code&gt;libtiff&lt;/code&gt; 函式庫讀取 TIFF 檔案內的影像與後設資料。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;安裝-tiff-函式庫&#34;&gt;安裝 TIFF 函式庫&lt;/h2&gt;
&lt;p&gt;若在 Ubuntu Linux 中，可以使用 apt 來安裝 TIFF 函式庫：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安裝 TIFF 函式庫&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install libtiff-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;讀取-tiff-影像轉為-rgba-格式&#34;&gt;讀取 TIFF 影像轉為 RGBA 格式&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;libtiff&lt;/code&gt; 函式庫中提供了一個 &lt;code&gt;TIFFReadRGBAImage&lt;/code&gt; 高階函數，可以自動讀取 TIFF 影像並轉為 8 位元的 RGBA 格式，以下是一個簡單的範例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 ITK 與 OpenVDB 將影像轉為 VDB 格式教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-openvdb-convert-image-to-vdb-format-tutorial-examples/</link>
      <pubDate>Fri, 05 Jun 2020 14:36:37 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-openvdb-convert-image-to-vdb-format-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 ITK 與 OpenVDB 將三維立體影像轉換為 VDB 格式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;itk-與-openvdb&#34;&gt;ITK 與 OpenVDB&lt;/h2&gt;
&lt;p&gt;若要將一般的三維立體影像（volume image）轉換為 VDB 格式，可以使用 ITK 函式庫讀取各種三維立體影像，然後再使用 OpenVDB 函式庫轉為 VDB 的檔案格式，以下是基本的實作程式碼。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ITK 影像處理 C&#43;&#43; 程式 Hello World 編譯教學與範例</title>
      <link>https://blog.gtwang.org/programming/itk-image-processing-cpp-language-hello-world-tutorial-examples/</link>
      <pubDate>Wed, 03 Jun 2020 15:31:26 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/itk-image-processing-cpp-language-hello-world-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Ubuntu Linux 中建立 ITK 應用程式開發環境，撰寫 ITK 的 hello world 程式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;開發環境&#34;&gt;開發環境&lt;/h2&gt;
&lt;p&gt;若要開發基本的 ITK C++ 應用程式，除了安裝 ITK 函式庫之外，還要安裝好 CMake 編譯工具。在 Ubuntu Linux 中，可以使用 apt 安裝：&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenVDB 函式庫自行編譯、安裝、使用教學與範例</title>
      <link>https://blog.gtwang.org/programming/openvdb-library-compile-install-hello-world-tutorial-examples/</link>
      <pubDate>Thu, 21 May 2020 19:47:52 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/openvdb-library-compile-install-hello-world-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何從原始碼自行編譯安裝 OpenVDB 函式庫，並編譯一個 hello world 程式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://www.openvdb.org/&#34;&gt;OpenVDB&lt;/a&gt; 是一套開放原始碼的 C++ 函式庫，提供高效能的三維立體資料（volumetric data）儲存結構與處理工具，以下是 OpenVDB 函式庫的安裝、使用教學與範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 編譯 C/C&#43;&#43; 語言 HDF5 程式教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-language-hdf5-program-compilation-tutorial/</link>
      <pubDate>Fri, 27 Mar 2020 20:03:11 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-language-hdf5-program-compilation-tutorial/</guid>
      <description>&lt;p&gt;介紹如何在 Linux 系統上開發與編譯 C/C++ 語言的 HDF5 程式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;基本-hdf5-開發環境&#34;&gt;基本 HDF5 開發環境&lt;/h2&gt;
&lt;p&gt;若要在 Ubuntu Linux 環境中以 HDF5 函式庫開發 C 或 C++ 的應用程式，除了安裝 gcc 編譯器之外，還要安裝 HDF5 的函式庫與編譯工具套件，這兩個可以使用 &lt;code&gt;apt&lt;/code&gt; 來安裝：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows 10 使用 Visual Studio 2019 編譯 ITK 應用程式教學與範例</title>
      <link>https://blog.gtwang.org/programming/windows-10-msvc-2019-compile-itk-5-tutorial-examples/</link>
      <pubDate>Thu, 19 Mar 2020 09:02:06 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/windows-10-msvc-2019-compile-itk-5-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Windows 10 中使用微軟的 Visual Studio 2019 編譯 ITK 的應用程式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;ITK（Insight Toolkit）是一套 C++ 影像分析處理函式庫，其編譯與安裝的方式跟 VTK 相當類似，以下是編譯、安裝 ITK 函式庫，以及編譯 ITK 應用程式的步驟。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows 10 使用 Visual Studio 2019 編譯 VTK/Qt 視窗程式教學與範例</title>
      <link>https://blog.gtwang.org/programming/windows-10-msvc-2019-compile-vtk-8-qt-5-tutorial-examples/</link>
      <pubDate>Thu, 19 Mar 2020 06:16:06 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/windows-10-msvc-2019-compile-vtk-8-qt-5-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何在 Windows 10 中使用微軟的 Visual Studio 2019 編譯 VTK 結合 Qt 的視窗應用程式，以及後續的包裝與布署。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://vtk.org/&#34;&gt;VTK&lt;/a&gt; 是一套 3D 視覺化工具函式庫，而 &lt;a href=&#34;https://www.qt.io/&#34;&gt;Qt&lt;/a&gt; 則是一套 C++ 視窗程式設計框架，以下介紹如何在 Windows 10 系統上，使用 MSVC 2019 來編譯 VTK/Qt 的應用程式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 程式語言 std::stack 堆疊用法教學與範例</title>
      <link>https://blog.gtwang.org/programming/c-cpp-stl-std-stack-tutorial/</link>
      <pubDate>Sun, 23 Feb 2020 20:33:44 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-cpp-stl-std-stack-tutorial/</guid>
      <description>&lt;p&gt;介紹 C++ 標準函式庫所提供的堆疊（stack）功能用法，並提供基本的使用範例。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;使用-c-堆疊&#34;&gt;使用 C++ 堆疊&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%A0%86%E6%A0%88&#34;&gt;堆疊（stack）&lt;/a&gt;是一種後進先出（LIFO, Last In First Out）的資料結構，在 C++ 中若要使用堆疊，可以運用 C++ 標準函式庫（STL）所提供的 &lt;code&gt;stack&lt;/code&gt;，以下是基本的使用範例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 程式語言 std::sort 陣列排序教學與範例</title>
      <link>https://blog.gtwang.org/programming/cpp-sort-function-tutorial-examples/</link>
      <pubDate>Fri, 08 Nov 2019 14:25:56 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-sort-function-tutorial-examples/</guid>
      <description>&lt;p&gt;介紹如何使用 C++ 內建的排序函數來排序一般的陣列。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;c-排序函數&#34;&gt;C++ 排序函數&lt;/h2&gt;
&lt;p&gt;若要在 C++ 程式語言中排序一般的陣列，可以直接使用 STL 標準函式庫中所提供的 &lt;code&gt;sort&lt;/code&gt; 函數，其用法如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言教學：Hello World 入門第一個程式</title>
      <link>https://blog.gtwang.org/programming/c-language-tutorial-hello-world/</link>
      <pubDate>Thu, 03 Oct 2019 15:47:40 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-language-tutorial-hello-world/</guid>
      <description>&lt;p&gt;在 Visual Studio 中學習撰寫第一個 C 語言的 Hello World 程式碼，編譯、執行後觀看結果。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;撰寫-hello-world-程式&#34;&gt;撰寫 Hello World 程式&lt;/h2&gt;
&lt;p&gt;首先打開 Visual Studio 的程式開發環境，新增一個普通的 C++ 專案（例如「主控台應用程式」），詳細步驟可參考 &lt;a href=&#34;https://blog.gtwang.org/programming/install-visual-studio-community-for-c-cpp-development-tutorial/&#34;&gt;Visual Studio Community 的安裝與使用教學&lt;/a&gt;。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
