Abstract
因為Computer Vision的作業,之前都是用C# + GDI+寫,但這次的作業要做Grayscale Dilation,想用STL的Generic Algorithm寫,但C++ Standard Library并無法讀取jpg檔,用其它Library又比較麻煩,所以又回頭想到GDI+,能同時使用STL和GDI+的,也只有C++/CLI了,我想這也是C++/CLI的優勢之一,可以讓你同時發揮.NET Framework和STL的power,以下的范例demo如何使用C++/CLI配合GDI+將jpg檔讀進來,并寫入jpg檔。
Introduction
此范例比須手動加上Reference System.Drawing.dll
?1
/**//*?
?2
(C)?OOMusou?2006?http://oomusou.cnblogs.com
?3
?4
Filename????:?ReadJpg.cpp
?5
Compiler????:?Visual?C++?8.0
?6
Description?:?Demo?how?to?read/write?jpg?by?GDI+
?7
Release?????:?11/19/2006
?8
*/
?9
10
#include?"stdafx.h"
11
12
using?namespace?System::Drawing;
13
using?namespace?System::Drawing::Imaging;
14
15
int?main()?
{
16
??Bitmap?^originalImage?=?gcnew?Bitmap("lena.jpg");
17
??Bitmap?^newImage?=?gcnew?Bitmap(originalImage->Width,?originalImage->Height);
18
19
??for(int?x?=?0;?x!=?originalImage->Width;++x)?
{
20
????for(int?y?=?0;?y?!=?originalImage->Height;?++y)?
{
21
??????int?r?=?originalImage->GetPixel(x,y).R;
22
??????int?g?=?originalImage->GetPixel(x,y).G;
23
??????int?b?=?originalImage->GetPixel(x,y).B;
24
25
??????newImage->SetPixel(x,y,?Color::FromArgb(r,?g,?b));
26
????}
27
??}
28
29
??newImage->Save("newlena.jpg");
30
31
??return?0;
32
}


?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15



16

17

18

19



20



21

22

23

24

25

26

27

28

29

30

31

32

See Also
(原創) 如何使用ANSI C/ISO C++讀寫24位元的bmp圖檔? (初級) (C/C++)
(原創) 如何使用ANSI C讀寫32位元的BMP圖檔? (C/C++) (C) (Image Processing)
(原創) 如何使用ANSI C讀寫24/32位元的BMP圖檔? (C/C++) (C) (Image Processing)
(原創) 如何用程序的方式載入jpg圖形文件? (.NET) (GDI+) (ASP.NET) (Image Processing)