author | Dominic Pinkman <Dominic.Pinkman@Nokia.com> |
Tue, 30 Mar 2010 16:16:55 +0100 | |
changeset 6 | 43e37759235e |
permissions | -rw-r--r-- |
6
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
1 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
2 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
3 |
<head> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
4 |
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
5 |
<title>TB9.2 Example Applications: examples/Multimedia/ICL/ICLCodec/PNGCodec.cpp Source File</title> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
6 |
<link href="tabs.css" rel="stylesheet" type="text/css"/> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
7 |
<link href="doxygen.css" rel="stylesheet" type="text/css"/> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
8 |
</head> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
9 |
<body> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
10 |
<!-- Generated by Doxygen 1.6.2 --> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
11 |
<h1>examples/Multimedia/ICL/ICLCodec/PNGCodec.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// PngCodec.CPP</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
12 |
<a name="l00002"></a>00002 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
13 |
<a name="l00003"></a>00003 <span class="comment">// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
14 |
<a name="l00004"></a>00004 <span class="comment">// All rights reserved.</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
15 |
<a name="l00005"></a>00005 <span class="comment">// This component and the accompanying materials are made available</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
16 |
<a name="l00006"></a>00006 <span class="comment">// under the terms of "Eclipse Public License v1.0"</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
17 |
<a name="l00007"></a>00007 <span class="comment">// which accompanies this distribution, and is available</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
18 |
<a name="l00008"></a>00008 <span class="comment">// at the URL "http://www.eclipse.org/legal/epl-v10.html".</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
19 |
<a name="l00009"></a>00009 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
20 |
<a name="l00010"></a>00010 <span class="comment">// Initial Contributors:</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
21 |
<a name="l00011"></a>00011 <span class="comment">// Nokia Corporation - initial contribution.</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
22 |
<a name="l00012"></a>00012 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
23 |
<a name="l00013"></a>00013 <span class="comment">// Contributors:</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
24 |
<a name="l00014"></a>00014 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
25 |
<a name="l00015"></a>00015 <span class="comment">// Description:</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
26 |
<a name="l00016"></a>00016 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
27 |
<a name="l00017"></a>00017 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
28 |
<a name="l00018"></a>00018 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
29 |
<a name="l00019"></a>00019 <span class="preprocessor">#include <fbs.h></span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
30 |
<a name="l00020"></a>00020 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
31 |
<a name="l00021"></a>00021 <span class="preprocessor">#include "ImageUtils.h"</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
32 |
<a name="l00022"></a>00022 <span class="preprocessor">#include "PNGCodec.h"</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
33 |
<a name="l00023"></a>00023 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
34 |
<a name="l00024"></a>00024 <span class="comment">// Constants.</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
35 |
<a name="l00025"></a>00025 <span class="keyword">const</span> TInt KTwipsPerMeter = 56693; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
36 |
<a name="l00026"></a>00026 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
37 |
<a name="l00027"></a>00027 <span class="comment">// </span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
38 |
<a name="l00028"></a>00028 <span class="comment">// TPngImageInformation: PNG image information</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
39 |
<a name="l00029"></a>00029 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
40 |
<a name="l00030"></a>00030 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
41 |
<a name="l00031"></a>00031 <span class="comment">// Initialise default PNG image information</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
42 |
<a name="l00032"></a>00032 TPngImageInformation::TPngImageInformation() |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
43 |
<a name="l00033"></a>00033 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
44 |
<a name="l00034"></a>00034 iSize.SetSize(0,0); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
45 |
<a name="l00035"></a>00035 iBitDepth = 0; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
46 |
<a name="l00036"></a>00036 iColorType = EGrayscale; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
47 |
<a name="l00037"></a>00037 iCompressionMethod = EDeflateInflate32K; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
48 |
<a name="l00038"></a>00038 iFilterMethod = EAdaptiveFiltering; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
49 |
<a name="l00039"></a>00039 iInterlaceMethod = ENoInterlace; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
50 |
<a name="l00040"></a>00040 iPalettePresent = EFalse; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
51 |
<a name="l00041"></a>00041 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
52 |
<a name="l00042"></a>00042 <span class="preprocessor">#if defined(_DEBUG)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
53 |
<a name="l00043"></a>00043 <span class="preprocessor"></span> <span class="comment">// as an optimisation, we are going to set iPalette to all zeros, instead of setting</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
54 |
<a name="l00044"></a>00044 <span class="comment">// each element to KRgbBlack. This assumes that KRbgBlack is itself zero.</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
55 |
<a name="l00045"></a>00045 ASSERT(<span class="keyword">sizeof</span>(TRgb)==<span class="keyword">sizeof</span>(TUint32)); <span class="comment">// ie no new fields</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
56 |
<a name="l00046"></a>00046 ASSERT(KRgbBlack.Value()==0); <span class="comment">// ie the one value is zero</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
57 |
<a name="l00047"></a>00047 <span class="preprocessor">#endif // defined(_DEBUG)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
58 |
<a name="l00048"></a>00048 <span class="preprocessor"></span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
59 |
<a name="l00049"></a>00049 Mem::FillZ(iPalette, KPngMaxPLTESize*<span class="keyword">sizeof</span>(TRgb)); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
60 |
<a name="l00050"></a>00050 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
61 |
<a name="l00051"></a>00051 iBackgroundPresent = EFalse; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
62 |
<a name="l00052"></a>00052 iBackgroundColor = KRgbWhite; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
63 |
<a name="l00053"></a>00053 iPhysicalPresent = EFalse; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
64 |
<a name="l00054"></a>00054 iPhysicalUnits = EUnknownUnits; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
65 |
<a name="l00055"></a>00055 iPhysicalSize.SetSize(0,0); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
66 |
<a name="l00056"></a>00056 iTransparencyPresent = EFalse; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
67 |
<a name="l00057"></a>00057 Mem::Fill(iTransparencyValue,KPngMaxPLTESize,0xff); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
68 |
<a name="l00058"></a>00058 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
69 |
<a name="l00059"></a>00059 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
70 |
<a name="l00060"></a>00060 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
71 |
<a name="l00061"></a>00061 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
72 |
<a name="l00062"></a>00062 <span class="comment">// CPngReadCodec: reads a PNG image</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
73 |
<a name="l00063"></a>00063 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
74 |
<a name="l00064"></a>00064 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
75 |
<a name="l00065"></a>00065 CPngReadCodec::~CPngReadCodec() |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
76 |
<a name="l00066"></a>00066 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
77 |
<a name="l00067"></a>00067 <span class="keyword">delete</span> iDecoder; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
78 |
<a name="l00068"></a>00068 <span class="keyword">delete</span> iDecompressor; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
79 |
<a name="l00069"></a>00069 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
80 |
<a name="l00070"></a>00070 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
81 |
<a name="l00071"></a>00071 <span class="comment">// Called by framework when a Convert operation begins</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
82 |
<a name="l00072"></a>00072 <span class="keywordtype">void</span> CPngReadCodec::InitFrameL(TFrameInfo& <span class="comment">/*aFrameInfo*/</span>, CFrameImageData& <span class="comment">/*aFrameImageData*/</span>, |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
83 |
<a name="l00073"></a>00073 TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
84 |
<a name="l00074"></a>00074 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
85 |
<a name="l00075"></a>00075 CFbsBitmap& newFrame = aDestination; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
86 |
<a name="l00076"></a>00076 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
87 |
<a name="l00077"></a>00077 TPoint& pos = Pos(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
88 |
<a name="l00078"></a>00078 pos.SetXY(0,0); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
89 |
<a name="l00079"></a>00079 iChunkBytesRemaining = 0; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
90 |
<a name="l00080"></a>00080 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
91 |
<a name="l00081"></a>00081 <span class="comment">// Use the supplied image processor</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
92 |
<a name="l00082"></a>00082 CImageProcessor* imageProc = ImageProcessorUtility::NewImageProcessorL(newFrame, iImageInfo.iSize, ERgb, aDisableErrorDiffusion); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
93 |
<a name="l00083"></a>00083 SetImageProcessor(imageProc); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
94 |
<a name="l00084"></a>00084 imageProc->PrepareL(newFrame,iImageInfo.iSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
95 |
<a name="l00085"></a>00085 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
96 |
<a name="l00086"></a>00086 CImageProcessor* maskProc = NULL; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
97 |
<a name="l00087"></a>00087 SetMaskProcessor(NULL); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
98 |
<a name="l00088"></a>00088 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
99 |
<a name="l00089"></a>00089 <span class="comment">// If transparency is being used, create a bitmap mask as well</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
100 |
<a name="l00090"></a>00090 <span class="keywordflow">if</span> ((iImageInfo.iTransparencyPresent || (iImageInfo.iColorType & TPngImageInformation::EAlphaChannelUsed)) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
101 |
<a name="l00091"></a>00091 && aDestinationMask) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
102 |
<a name="l00092"></a>00092 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
103 |
<a name="l00093"></a>00093 maskProc = ImageProcessorUtility::NewImageProcessorL(*aDestinationMask, iImageInfo.iSize, ERgb, aDisableErrorDiffusion); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
104 |
<a name="l00094"></a>00094 SetMaskProcessor(maskProc); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
105 |
<a name="l00095"></a>00095 maskProc->PrepareL(*aDestinationMask,iImageInfo.iSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
106 |
<a name="l00096"></a>00096 <span class="comment">// set mask to black so that unknown parts on streamed image are not drawn</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
107 |
<a name="l00097"></a>00097 ClearBitmapL(*aDestinationMask, KRgbBlack); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
108 |
<a name="l00098"></a>00098 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
109 |
<a name="l00099"></a>00099 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
110 |
<a name="l00100"></a>00100 <span class="comment">// Create a helper to read the scan lines</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
111 |
<a name="l00101"></a>00101 <span class="keyword">delete</span> iDecoder; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
112 |
<a name="l00102"></a>00102 iDecoder = NULL; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
113 |
<a name="l00103"></a>00103 iDecoder = CPngReadSubCodec::NewL(imageProc,maskProc,iImageInfo); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
114 |
<a name="l00104"></a>00104 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
115 |
<a name="l00105"></a>00105 <span class="comment">// And a unzipper to decompress image data</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
116 |
<a name="l00106"></a>00106 <span class="keywordflow">if</span> (!iDecompressor) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
117 |
<a name="l00107"></a>00107 iDecompressor = CEZDecompressor::NewL(*<span class="keyword">this</span>); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
118 |
<a name="l00108"></a>00108 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
119 |
<a name="l00109"></a>00109 iDecompressor->ResetL(*<span class="keyword">this</span>); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
120 |
<a name="l00110"></a>00110 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
121 |
<a name="l00111"></a>00111 <span class="keywordflow">if</span> (maskProc==NULL) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
122 |
<a name="l00112"></a>00112 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
123 |
<a name="l00113"></a>00113 <span class="comment">// if no mask, clear destination for sensible behaviour on streamed partial images</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
124 |
<a name="l00114"></a>00114 TRgb background = iImageInfo.iBackgroundPresent ? iImageInfo.iBackgroundColor : KRgbWhite; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
125 |
<a name="l00115"></a>00115 ClearBitmapL(aDestination, background); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
126 |
<a name="l00116"></a>00116 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
127 |
<a name="l00117"></a>00117 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
128 |
<a name="l00118"></a>00118 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
129 |
<a name="l00119"></a>00119 <span class="comment">// Called by framework to initialise image frame header</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
130 |
<a name="l00120"></a>00120 <span class="keywordtype">void</span> CPngReadCodec::InitFrameHeader(TFrameInfo& aFrameSettings, CFrameImageData& <span class="comment">/* aFrameImageData */</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
131 |
<a name="l00121"></a>00121 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
132 |
<a name="l00122"></a>00122 ASSERT(aFrameSettings.CurrentFrameState() == TFrameInfo::EFrameInfoUninitialised); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
133 |
<a name="l00123"></a>00123 iFrameInfo = &aFrameSettings; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
134 |
<a name="l00124"></a>00124 iFrameInfo->SetCurrentFrameState(TFrameInfo::EFrameInfoProcessingFrameHeader); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
135 |
<a name="l00125"></a>00125 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
136 |
<a name="l00126"></a>00126 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
137 |
<a name="l00127"></a>00127 <span class="comment">// Called by framework to process a header for a frame</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
138 |
<a name="l00128"></a>00128 TFrameState CPngReadCodec::ProcessFrameHeaderL(TBufPtr8& aData) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
139 |
<a name="l00129"></a>00129 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
140 |
<a name="l00130"></a>00130 <span class="keyword">const</span> TUint8* startDataPtr = aData.Ptr(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
141 |
<a name="l00131"></a>00131 <span class="keyword">const</span> TUint8* dataPtr = startDataPtr; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
142 |
<a name="l00132"></a>00132 <span class="keyword">const</span> TUint8* dataPtrLimit = startDataPtr + aData.Length(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
143 |
<a name="l00133"></a>00133 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
144 |
<a name="l00134"></a>00134 <span class="comment">// Process the mandatory PNG header chunk: sets up iImageInfo</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
145 |
<a name="l00135"></a>00135 <span class="keywordflow">if</span> (iFrameInfo->CurrentFrameState() == TFrameInfo::EFrameInfoProcessingFrameHeader) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
146 |
<a name="l00136"></a>00136 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
147 |
<a name="l00137"></a>00137 <span class="keywordflow">if</span> (dataPtr + KPngChunkLengthSize + KPngChunkIdSize + KPngIHDRChunkSize + KPngChunkCRCSize > dataPtrLimit) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
148 |
<a name="l00138"></a>00138 User::Leave(KErrUnderflow); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
149 |
<a name="l00139"></a>00139 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
150 |
<a name="l00140"></a>00140 TInt chunkLength = PtrReadUtil::ReadBigEndianUint32Inc(dataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
151 |
<a name="l00141"></a>00141 TPtrC8 chunkId(dataPtr,KPngChunkIdSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
152 |
<a name="l00142"></a>00142 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
153 |
<a name="l00143"></a>00143 <span class="keywordflow">if</span> (chunkLength != KPngIHDRChunkSize || chunkId != KPngIHDRChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
154 |
<a name="l00144"></a>00144 User::Leave(KErrNotFound); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
155 |
<a name="l00145"></a>00145 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
156 |
<a name="l00146"></a>00146 dataPtr += KPngChunkIdSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
157 |
<a name="l00147"></a>00147 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
158 |
<a name="l00148"></a>00148 DoProcessIHDRL(dataPtr,chunkLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
159 |
<a name="l00149"></a>00149 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
160 |
<a name="l00150"></a>00150 dataPtr += KPngIHDRChunkSize + KPngChunkCRCSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
161 |
<a name="l00151"></a>00151 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
162 |
<a name="l00152"></a>00152 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
163 |
<a name="l00153"></a>00153 <span class="comment">// Process any optional PNG header chunks</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
164 |
<a name="l00154"></a>00154 TRAPD(err, DoProcessInfoL(dataPtr, dataPtrLimit)); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
165 |
<a name="l00155"></a>00155 <span class="keywordflow">if</span> (err != KErrNone) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
166 |
<a name="l00156"></a>00156 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
167 |
<a name="l00157"></a>00157 <span class="keywordflow">if</span> (err == KErrNotFound) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
168 |
<a name="l00158"></a>00158 <span class="keywordflow">return</span> EFrameComplete; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
169 |
<a name="l00159"></a>00159 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
170 |
<a name="l00160"></a>00160 User::Leave(err); <span class="comment">// A real error occured</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
171 |
<a name="l00161"></a>00161 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
172 |
<a name="l00162"></a>00162 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
173 |
<a name="l00163"></a>00163 <span class="comment">// Having read the header, can initialise the frame information</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
174 |
<a name="l00164"></a>00164 aData.Shift(dataPtr - startDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
175 |
<a name="l00165"></a>00165 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
176 |
<a name="l00166"></a>00166 iFrameInfo->iFrameCoordsInPixels.SetRect(TPoint(0,0),iImageInfo.iSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
177 |
<a name="l00167"></a>00167 iFrameInfo->iOverallSizeInPixels = iImageInfo.iSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
178 |
<a name="l00168"></a>00168 <span class="keywordflow">if</span> (iImageInfo.iPhysicalPresent && iImageInfo.iPhysicalUnits == TPngImageInformation::EMeters) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
179 |
<a name="l00169"></a>00169 iFrameInfo->iFrameSizeInTwips = iImageInfo.iPhysicalSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
180 |
<a name="l00170"></a>00170 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
181 |
<a name="l00171"></a>00171 iFrameInfo->iFrameSizeInTwips.SetSize(0,0); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
182 |
<a name="l00172"></a>00172 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
183 |
<a name="l00173"></a>00173 iFrameInfo->iBitsPerPixel = iImageInfo.iBitDepth; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
184 |
<a name="l00174"></a>00174 <span class="keywordflow">if</span> (iImageInfo.iColorType & TPngImageInformation::EColorUsed) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
185 |
<a name="l00175"></a>00175 iFrameInfo->iBitsPerPixel *= 3; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
186 |
<a name="l00176"></a>00176 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
187 |
<a name="l00177"></a>00177 iFrameInfo->iDelay = 0; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
188 |
<a name="l00178"></a>00178 iFrameInfo->iFlags = TFrameInfo::ECanDither; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
189 |
<a name="l00179"></a>00179 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
190 |
<a name="l00180"></a>00180 <span class="keywordflow">if</span> (iImageInfo.iColorType & (TPngImageInformation::EPaletteUsed | TPngImageInformation::EColorUsed)) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
191 |
<a name="l00181"></a>00181 iFrameInfo->iFlags |= TFrameInfo::EColor; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
192 |
<a name="l00182"></a>00182 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
193 |
<a name="l00183"></a>00183 <span class="keywordflow">if</span> (iImageInfo.iColorType & TPngImageInformation::EAlphaChannelUsed) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
194 |
<a name="l00184"></a>00184 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
195 |
<a name="l00185"></a>00185 iFrameInfo->iFlags |= TFrameInfo::ETransparencyPossible; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
196 |
<a name="l00186"></a>00186 iFrameInfo->iFlags |= TFrameInfo::EAlphaChannel; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
197 |
<a name="l00187"></a>00187 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
198 |
<a name="l00188"></a>00188 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iImageInfo.iTransparencyPresent) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
199 |
<a name="l00189"></a>00189 iFrameInfo->iFlags |= TFrameInfo::ETransparencyPossible; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
200 |
<a name="l00190"></a>00190 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
201 |
<a name="l00191"></a>00191 <span class="keywordflow">switch</span> (iFrameInfo->iBitsPerPixel) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
202 |
<a name="l00192"></a>00192 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
203 |
<a name="l00193"></a>00193 <span class="keywordflow">case</span> 1: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
204 |
<a name="l00194"></a>00194 iFrameInfo->iFrameDisplayMode = EGray2; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
205 |
<a name="l00195"></a>00195 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
206 |
<a name="l00196"></a>00196 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
207 |
<a name="l00197"></a>00197 <span class="keywordflow">case</span> 2: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
208 |
<a name="l00198"></a>00198 iFrameInfo->iFrameDisplayMode = EGray4; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
209 |
<a name="l00199"></a>00199 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
210 |
<a name="l00200"></a>00200 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
211 |
<a name="l00201"></a>00201 <span class="keywordflow">case</span> 4: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
212 |
<a name="l00202"></a>00202 iFrameInfo->iFrameDisplayMode = (iFrameInfo->iFlags & TFrameInfo::EColor) ? EColor16 : EGray16; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
213 |
<a name="l00203"></a>00203 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
214 |
<a name="l00204"></a>00204 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
215 |
<a name="l00205"></a>00205 <span class="keywordflow">case</span> 8: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
216 |
<a name="l00206"></a>00206 iFrameInfo->iFrameDisplayMode = (iFrameInfo->iFlags & TFrameInfo::EColor) ? EColor256 : EGray256; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
217 |
<a name="l00207"></a>00207 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
218 |
<a name="l00208"></a>00208 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
219 |
<a name="l00209"></a>00209 <span class="keywordflow">case</span> 12: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
220 |
<a name="l00210"></a>00210 iFrameInfo->iFrameDisplayMode = EColor4K; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
221 |
<a name="l00211"></a>00211 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
222 |
<a name="l00212"></a>00212 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
223 |
<a name="l00213"></a>00213 <span class="keywordflow">case</span> 16: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
224 |
<a name="l00214"></a>00214 iFrameInfo->iFrameDisplayMode = EColor64K; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
225 |
<a name="l00215"></a>00215 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
226 |
<a name="l00216"></a>00216 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
227 |
<a name="l00217"></a>00217 <span class="keywordflow">case</span> 24: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
228 |
<a name="l00218"></a>00218 iFrameInfo->iFrameDisplayMode = EColor16M; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
229 |
<a name="l00219"></a>00219 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
230 |
<a name="l00220"></a>00220 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
231 |
<a name="l00221"></a>00221 <span class="keywordflow">default</span>: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
232 |
<a name="l00222"></a>00222 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
233 |
<a name="l00223"></a>00223 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
234 |
<a name="l00224"></a>00224 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
235 |
<a name="l00225"></a>00225 <span class="keywordflow">if</span> (iImageInfo.iBackgroundPresent) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
236 |
<a name="l00226"></a>00226 iFrameInfo->iBackgroundColor = iImageInfo.iBackgroundColor; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
237 |
<a name="l00227"></a>00227 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
238 |
<a name="l00228"></a>00228 iFrameInfo->SetCurrentFrameState(TFrameInfo::EFrameInfoProcessingComplete); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
239 |
<a name="l00229"></a>00229 <span class="keywordflow">return</span> EFrameComplete; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
240 |
<a name="l00230"></a>00230 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
241 |
<a name="l00231"></a>00231 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
242 |
<a name="l00232"></a>00232 <span class="comment">// Called by the framework to process frame data</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
243 |
<a name="l00233"></a>00233 TFrameState CPngReadCodec::ProcessFrameL(TBufPtr8& aSrc) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
244 |
<a name="l00234"></a>00234 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
245 |
<a name="l00235"></a>00235 CImageProcessor*<span class="keyword">const</span> imageProc = ImageProcessor(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
246 |
<a name="l00236"></a>00236 CImageProcessor*<span class="keyword">const</span> maskProc = MaskProcessor(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
247 |
<a name="l00237"></a>00237 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
248 |
<a name="l00238"></a>00238 TUint8* startDataPtr = <span class="keyword">const_cast<</span>TUint8*<span class="keyword">></span>(aSrc.Ptr()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
249 |
<a name="l00239"></a>00239 TUint8* dataPtr = startDataPtr; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
250 |
<a name="l00240"></a>00240 <span class="keyword">const</span> TUint8* dataPtrLimit = dataPtr + aSrc.Length(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
251 |
<a name="l00241"></a>00241 <span class="keywordflow">while</span> (dataPtr < dataPtrLimit) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
252 |
<a name="l00242"></a>00242 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
253 |
<a name="l00243"></a>00243 <span class="comment">// If at the end of a PNG chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
254 |
<a name="l00244"></a>00244 <span class="keywordflow">if</span> (iChunkBytesRemaining == 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
255 |
<a name="l00245"></a>00245 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
256 |
<a name="l00246"></a>00246 <span class="keywordflow">if</span> (iChunkId == KPngIDATChunkId) <span class="comment">// Need to skip IDAT chunk CRCs</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
257 |
<a name="l00247"></a>00247 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
258 |
<a name="l00248"></a>00248 <span class="keywordflow">if</span> (dataPtr + KPngChunkCRCSize + KPngChunkLengthSize + KPngChunkIdSize > dataPtrLimit) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
259 |
<a name="l00249"></a>00249 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
260 |
<a name="l00250"></a>00250 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
261 |
<a name="l00251"></a>00251 dataPtr += KPngChunkCRCSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
262 |
<a name="l00252"></a>00252 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
263 |
<a name="l00253"></a>00253 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
264 |
<a name="l00254"></a>00254 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
265 |
<a name="l00255"></a>00255 <span class="keywordflow">if</span> (dataPtr + KPngChunkLengthSize + KPngChunkIdSize > dataPtrLimit) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
266 |
<a name="l00256"></a>00256 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
267 |
<a name="l00257"></a>00257 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
268 |
<a name="l00258"></a>00258 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
269 |
<a name="l00259"></a>00259 iChunkBytesRemaining = PtrReadUtil::ReadBigEndianUint32Inc(const_cast<const TUint8*&>(dataPtr)); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
270 |
<a name="l00260"></a>00260 iChunkId = TPtr8(dataPtr,KPngChunkIdSize,KPngChunkIdSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
271 |
<a name="l00261"></a>00261 dataPtr += KPngChunkIdSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
272 |
<a name="l00262"></a>00262 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
273 |
<a name="l00263"></a>00263 <span class="comment">// Process an image data chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
274 |
<a name="l00264"></a>00264 <span class="keywordflow">if</span> (iChunkId == KPngIDATChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
275 |
<a name="l00265"></a>00265 DoProcessDataL(const_cast<const TUint8*&>(dataPtr),dataPtrLimit); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
276 |
<a name="l00266"></a>00266 <span class="comment">// Process an END chunk -- frame is complete</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
277 |
<a name="l00267"></a>00267 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iChunkId == KPngIENDChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
278 |
<a name="l00268"></a>00268 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
279 |
<a name="l00269"></a>00269 iDecompressor->InflateL(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
280 |
<a name="l00270"></a>00270 imageProc->FlushPixels(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
281 |
<a name="l00271"></a>00271 <span class="keywordflow">if</span> (maskProc) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
282 |
<a name="l00272"></a>00272 maskProc->FlushPixels(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
283 |
<a name="l00273"></a>00273 <span class="keywordflow">return</span> EFrameComplete; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
284 |
<a name="l00274"></a>00274 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
285 |
<a name="l00275"></a>00275 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
286 |
<a name="l00276"></a>00276 <span class="comment">// Skip other chunks</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
287 |
<a name="l00277"></a>00277 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
288 |
<a name="l00278"></a>00278 TInt bytesLeft = dataPtrLimit - dataPtr; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
289 |
<a name="l00279"></a>00279 <span class="keywordflow">if</span> (bytesLeft >= iChunkBytesRemaining + KPngChunkCRCSize) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
290 |
<a name="l00280"></a>00280 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
291 |
<a name="l00281"></a>00281 dataPtr += iChunkBytesRemaining + KPngChunkCRCSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
292 |
<a name="l00282"></a>00282 iChunkBytesRemaining = 0; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
293 |
<a name="l00283"></a>00283 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
294 |
<a name="l00284"></a>00284 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
295 |
<a name="l00285"></a>00285 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
296 |
<a name="l00286"></a>00286 dataPtr += bytesLeft; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
297 |
<a name="l00287"></a>00287 iChunkBytesRemaining -= bytesLeft; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
298 |
<a name="l00288"></a>00288 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
299 |
<a name="l00289"></a>00289 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
300 |
<a name="l00290"></a>00290 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
301 |
<a name="l00291"></a>00291 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
302 |
<a name="l00292"></a>00292 aSrc.Shift(dataPtr - startDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
303 |
<a name="l00293"></a>00293 <span class="keywordflow">return</span> EFrameIncomplete; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
304 |
<a name="l00294"></a>00294 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
305 |
<a name="l00295"></a>00295 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
306 |
<a name="l00296"></a>00296 <span class="comment">// Process any optional PNG header chunks</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
307 |
<a name="l00297"></a>00297 <span class="keywordtype">void</span> CPngReadCodec::DoProcessInfoL(<span class="keyword">const</span> TUint8*& aDataPtr,<span class="keyword">const</span> TUint8* aDataPtrLimit) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
308 |
<a name="l00298"></a>00298 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
309 |
<a name="l00299"></a>00299 FOREVER |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
310 |
<a name="l00300"></a>00300 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
311 |
<a name="l00301"></a>00301 <span class="keywordflow">if</span> (aDataPtr + KPngChunkLengthSize + KPngChunkIdSize > aDataPtrLimit) <span class="comment">// Check there is enough data to read the chunk length</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
312 |
<a name="l00302"></a>00302 User::Leave(KErrUnderflow); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
313 |
<a name="l00303"></a>00303 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
314 |
<a name="l00304"></a>00304 TInt chunkLength = PtrReadUtil::ReadBigEndianUint32Inc(aDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
315 |
<a name="l00305"></a>00305 TPtrC8 chunkId (&aDataPtr[0],KPngChunkIdSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
316 |
<a name="l00306"></a>00306 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
317 |
<a name="l00307"></a>00307 <span class="keywordflow">if</span> (chunkId == KPngIDATChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
318 |
<a name="l00308"></a>00308 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
319 |
<a name="l00309"></a>00309 aDataPtr -= KPngChunkLengthSize; <span class="comment">// Rewind to start of chunkLength</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
320 |
<a name="l00310"></a>00310 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
321 |
<a name="l00311"></a>00311 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
322 |
<a name="l00312"></a>00312 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
323 |
<a name="l00313"></a>00313 <span class="keywordflow">if</span> (aDataPtr + KPngChunkIdSize + chunkLength + KPngChunkCRCSize > aDataPtrLimit) <span class="comment">// Check there is enough data to read the whole chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
324 |
<a name="l00314"></a>00314 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
325 |
<a name="l00315"></a>00315 aDataPtr -= KPngChunkLengthSize; <span class="comment">// Rewind to start of chunkLength</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
326 |
<a name="l00316"></a>00316 User::Leave(KErrUnderflow); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
327 |
<a name="l00317"></a>00317 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
328 |
<a name="l00318"></a>00318 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
329 |
<a name="l00319"></a>00319 aDataPtr += KPngChunkIdSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
330 |
<a name="l00320"></a>00320 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
331 |
<a name="l00321"></a>00321 <span class="keywordflow">if</span> (chunkId == KPngPLTEChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
332 |
<a name="l00322"></a>00322 DoProcessPLTEL(aDataPtr,chunkLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
333 |
<a name="l00323"></a>00323 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (chunkId == KPngbKGDChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
334 |
<a name="l00324"></a>00324 DoProcessbKGDL(aDataPtr,chunkLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
335 |
<a name="l00325"></a>00325 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (chunkId == KPngpHYsChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
336 |
<a name="l00326"></a>00326 DoProcesspHYsL(aDataPtr,chunkLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
337 |
<a name="l00327"></a>00327 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (chunkId == KPngtRNSChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
338 |
<a name="l00328"></a>00328 DoProcesstRNSL(aDataPtr,chunkLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
339 |
<a name="l00329"></a>00329 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (chunkId == KPngIHDRChunkId || chunkId == KPngIENDChunkId) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
340 |
<a name="l00330"></a>00330 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
341 |
<a name="l00331"></a>00331 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
342 |
<a name="l00332"></a>00332 aDataPtr += chunkLength; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
343 |
<a name="l00333"></a>00333 PtrReadUtil::ReadBigEndianUint32Inc(aDataPtr); <span class="comment">// Skip crc value</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
344 |
<a name="l00334"></a>00334 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
345 |
<a name="l00335"></a>00335 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
346 |
<a name="l00336"></a>00336 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
347 |
<a name="l00337"></a>00337 <span class="comment">// Process the mandatory PNG header chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
348 |
<a name="l00338"></a>00338 <span class="keywordtype">void</span> CPngReadCodec::DoProcessIHDRL(<span class="keyword">const</span> TUint8* aDataPtr,TInt aChunkLength) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
349 |
<a name="l00339"></a>00339 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
350 |
<a name="l00340"></a>00340 <span class="keywordflow">if</span> (aChunkLength != KPngIHDRChunkSize) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
351 |
<a name="l00341"></a>00341 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
352 |
<a name="l00342"></a>00342 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
353 |
<a name="l00343"></a>00343 iImageInfo.iSize.iWidth = PtrReadUtil::ReadBigEndianUint32Inc(aDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
354 |
<a name="l00344"></a>00344 iImageInfo.iSize.iHeight = PtrReadUtil::ReadBigEndianUint32Inc(aDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
355 |
<a name="l00345"></a>00345 iImageInfo.iBitDepth = aDataPtr[0]; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
356 |
<a name="l00346"></a>00346 iImageInfo.iColorType = TPngImageInformation::TColorType(aDataPtr[1]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
357 |
<a name="l00347"></a>00347 iImageInfo.iCompressionMethod = TPngImageInformation::TCompressionMethod(aDataPtr[2]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
358 |
<a name="l00348"></a>00348 iImageInfo.iFilterMethod = TPngImageInformation::TFilterMethod(aDataPtr[3]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
359 |
<a name="l00349"></a>00349 iImageInfo.iInterlaceMethod = TPngImageInformation::TInterlaceMethod(aDataPtr[4]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
360 |
<a name="l00350"></a>00350 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
361 |
<a name="l00351"></a>00351 <span class="comment">// Check is one of the PNG formats we support</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
362 |
<a name="l00352"></a>00352 <span class="keywordflow">if</span> (iImageInfo.iSize.iWidth < 1 || iImageInfo.iSize.iHeight < 1 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
363 |
<a name="l00353"></a>00353 || iImageInfo.iCompressionMethod != TPngImageInformation::EDeflateInflate32K |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
364 |
<a name="l00354"></a>00354 || iImageInfo.iFilterMethod != TPngImageInformation::EAdaptiveFiltering |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
365 |
<a name="l00355"></a>00355 || (iImageInfo.iInterlaceMethod != TPngImageInformation::ENoInterlace && |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
366 |
<a name="l00356"></a>00356 iImageInfo.iInterlaceMethod != TPngImageInformation::EAdam7Interlace)) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
367 |
<a name="l00357"></a>00357 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
368 |
<a name="l00358"></a>00358 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
369 |
<a name="l00359"></a>00359 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
370 |
<a name="l00360"></a>00360 <span class="comment">// Process a PNG PLTE (palette) chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
371 |
<a name="l00361"></a>00361 <span class="keywordtype">void</span> CPngReadCodec::DoProcessPLTEL(<span class="keyword">const</span> TUint8* aDataPtr,TInt aChunkLength) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
372 |
<a name="l00362"></a>00362 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
373 |
<a name="l00363"></a>00363 <span class="keywordflow">if</span> (aChunkLength % 3 != 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
374 |
<a name="l00364"></a>00364 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
375 |
<a name="l00365"></a>00365 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
376 |
<a name="l00366"></a>00366 iImageInfo.iPalettePresent = ETrue; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
377 |
<a name="l00367"></a>00367 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
378 |
<a name="l00368"></a>00368 <span class="keyword">const</span> TUint8* dataPtrLimit = aDataPtr + aChunkLength; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
379 |
<a name="l00369"></a>00369 TRgb* palettePtr = iImageInfo.iPalette; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
380 |
<a name="l00370"></a>00370 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
381 |
<a name="l00371"></a>00371 <span class="keywordflow">while</span> (aDataPtr < dataPtrLimit) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
382 |
<a name="l00372"></a>00372 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
383 |
<a name="l00373"></a>00373 *palettePtr++ = TRgb(aDataPtr[0],aDataPtr[1],aDataPtr[2]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
384 |
<a name="l00374"></a>00374 aDataPtr += 3; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
385 |
<a name="l00375"></a>00375 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
386 |
<a name="l00376"></a>00376 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
387 |
<a name="l00377"></a>00377 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
388 |
<a name="l00378"></a>00378 <span class="comment">// Process a PNG bKGD (background color) chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
389 |
<a name="l00379"></a>00379 <span class="keywordtype">void</span> CPngReadCodec::DoProcessbKGDL(<span class="keyword">const</span> TUint8* aDataPtr,TInt aChunkLength) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
390 |
<a name="l00380"></a>00380 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
391 |
<a name="l00381"></a>00381 iImageInfo.iBackgroundPresent = ETrue; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
392 |
<a name="l00382"></a>00382 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
393 |
<a name="l00383"></a>00383 <span class="keywordflow">if</span> (iImageInfo.iColorType == TPngImageInformation::EIndexedColor) <span class="comment">// 3</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
394 |
<a name="l00384"></a>00384 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
395 |
<a name="l00385"></a>00385 <span class="keywordflow">if</span> (aChunkLength < 1) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
396 |
<a name="l00386"></a>00386 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
397 |
<a name="l00387"></a>00387 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
398 |
<a name="l00388"></a>00388 iImageInfo.iBackgroundColor = iImageInfo.iPalette[aDataPtr[0]]; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
399 |
<a name="l00389"></a>00389 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
400 |
<a name="l00390"></a>00390 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iImageInfo.iColorType & TPngImageInformation::EMonochrome) <span class="comment">// 0 & 4</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
401 |
<a name="l00391"></a>00391 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
402 |
<a name="l00392"></a>00392 <span class="keywordflow">if</span> (aChunkLength < 2) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
403 |
<a name="l00393"></a>00393 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
404 |
<a name="l00394"></a>00394 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
405 |
<a name="l00395"></a>00395 TInt grayLevel = PtrReadUtil::ReadBigEndianInt16(aDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
406 |
<a name="l00396"></a>00396 ASSERT(iImageInfo.iBitDepth<8); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
407 |
<a name="l00397"></a>00397 grayLevel <<= (7-iImageInfo.iBitDepth); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
408 |
<a name="l00398"></a>00398 iImageInfo.iBackgroundColor = TRgb::Gray256(grayLevel); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
409 |
<a name="l00399"></a>00399 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
410 |
<a name="l00400"></a>00400 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iImageInfo.iColorType & TPngImageInformation::EColorUsed) <span class="comment">// 2 & 6</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
411 |
<a name="l00401"></a>00401 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
412 |
<a name="l00402"></a>00402 <span class="keywordflow">if</span> (aChunkLength < 6) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
413 |
<a name="l00403"></a>00403 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
414 |
<a name="l00404"></a>00404 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
415 |
<a name="l00405"></a>00405 TInt red = PtrReadUtil::ReadBigEndianInt16(&aDataPtr[0]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
416 |
<a name="l00406"></a>00406 TInt green = PtrReadUtil::ReadBigEndianInt16(&aDataPtr[2]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
417 |
<a name="l00407"></a>00407 TInt blue = PtrReadUtil::ReadBigEndianInt16(&aDataPtr[4]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
418 |
<a name="l00408"></a>00408 ASSERT (iImageInfo.iBitDepth<8); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
419 |
<a name="l00409"></a>00409 <span class="keyword">const</span> TInt offset = 7-iImageInfo.iBitDepth; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
420 |
<a name="l00410"></a>00410 red <<= offset; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
421 |
<a name="l00411"></a>00411 green <<= offset; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
422 |
<a name="l00412"></a>00412 blue <<= offset; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
423 |
<a name="l00413"></a>00413 iImageInfo.iBackgroundColor = TRgb(red,green,blue); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
424 |
<a name="l00414"></a>00414 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
425 |
<a name="l00415"></a>00415 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
426 |
<a name="l00416"></a>00416 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
427 |
<a name="l00417"></a>00417 <span class="comment">// Process a PNG pHYs (Physical pixel dimensions) chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
428 |
<a name="l00418"></a>00418 <span class="keywordtype">void</span> CPngReadCodec::DoProcesspHYsL(<span class="keyword">const</span> TUint8* aDataPtr,TInt aChunkLength) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
429 |
<a name="l00419"></a>00419 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
430 |
<a name="l00420"></a>00420 <span class="keywordflow">if</span> (aChunkLength != KPngpHYsChunkSize) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
431 |
<a name="l00421"></a>00421 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
432 |
<a name="l00422"></a>00422 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
433 |
<a name="l00423"></a>00423 iImageInfo.iPhysicalUnits = TPngImageInformation::TPhysicalUnits(aDataPtr[8]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
434 |
<a name="l00424"></a>00424 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
435 |
<a name="l00425"></a>00425 <span class="keywordflow">if</span> (iImageInfo.iPhysicalUnits == TPngImageInformation::EMeters) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
436 |
<a name="l00426"></a>00426 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
437 |
<a name="l00427"></a>00427 iImageInfo.iPhysicalPresent = ETrue; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
438 |
<a name="l00428"></a>00428 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
439 |
<a name="l00429"></a>00429 TInt horzPixelsPerMeter = PtrReadUtil::ReadBigEndianUint32Inc(aDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
440 |
<a name="l00430"></a>00430 TInt vertPixelsPerMeter = PtrReadUtil::ReadBigEndianUint32Inc(aDataPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
441 |
<a name="l00431"></a>00431 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
442 |
<a name="l00432"></a>00432 <span class="keywordflow">if</span> (horzPixelsPerMeter > 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
443 |
<a name="l00433"></a>00433 iImageInfo.iPhysicalSize.iWidth = iImageInfo.iSize.iWidth * KTwipsPerMeter / horzPixelsPerMeter; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
444 |
<a name="l00434"></a>00434 <span class="keywordflow">if</span> (vertPixelsPerMeter > 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
445 |
<a name="l00435"></a>00435 iImageInfo.iPhysicalSize.iHeight = iImageInfo.iSize.iHeight * KTwipsPerMeter / vertPixelsPerMeter; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
446 |
<a name="l00436"></a>00436 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
447 |
<a name="l00437"></a>00437 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
448 |
<a name="l00438"></a>00438 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
449 |
<a name="l00439"></a>00439 <span class="comment">// Process a PNG tRNS (Transparency) chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
450 |
<a name="l00440"></a>00440 <span class="keywordtype">void</span> CPngReadCodec::DoProcesstRNSL(<span class="keyword">const</span> TUint8* aDataPtr,TInt aChunkLength) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
451 |
<a name="l00441"></a>00441 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
452 |
<a name="l00442"></a>00442 iImageInfo.iTransparencyPresent = ETrue; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
453 |
<a name="l00443"></a>00443 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
454 |
<a name="l00444"></a>00444 <span class="keywordflow">if</span> (iImageInfo.iColorType == TPngImageInformation::EIndexedColor) <span class="comment">// 3</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
455 |
<a name="l00445"></a>00445 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
456 |
<a name="l00446"></a>00446 <span class="keywordflow">if</span> (aChunkLength < 1) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
457 |
<a name="l00447"></a>00447 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
458 |
<a name="l00448"></a>00448 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
459 |
<a name="l00449"></a>00449 Mem::Copy(iImageInfo.iTransparencyValue,aDataPtr,aChunkLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
460 |
<a name="l00450"></a>00450 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
461 |
<a name="l00451"></a>00451 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iImageInfo.iColorType == TPngImageInformation::EGrayscale) <span class="comment">// 0</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
462 |
<a name="l00452"></a>00452 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
463 |
<a name="l00453"></a>00453 <span class="keywordflow">if</span> (aChunkLength < 2) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
464 |
<a name="l00454"></a>00454 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
465 |
<a name="l00455"></a>00455 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
466 |
<a name="l00456"></a>00456 iImageInfo.iTransparentGray = TUint16((aDataPtr[0] << 8) | aDataPtr[1]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
467 |
<a name="l00457"></a>00457 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
468 |
<a name="l00458"></a>00458 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iImageInfo.iColorType == TPngImageInformation::EDirectColor) <span class="comment">// 2</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
469 |
<a name="l00459"></a>00459 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
470 |
<a name="l00460"></a>00460 <span class="keywordflow">if</span> (aChunkLength < 6) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
471 |
<a name="l00461"></a>00461 User::Leave(KErrCorrupt); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
472 |
<a name="l00462"></a>00462 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
473 |
<a name="l00463"></a>00463 iImageInfo.iTransparentRed = TUint16((aDataPtr[0] << 8) | aDataPtr[1]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
474 |
<a name="l00464"></a>00464 iImageInfo.iTransparentGreen = TUint16((aDataPtr[2] << 8) | aDataPtr[3]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
475 |
<a name="l00465"></a>00465 iImageInfo.iTransparentBlue = TUint16((aDataPtr[4] << 8) | aDataPtr[5]); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
476 |
<a name="l00466"></a>00466 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
477 |
<a name="l00467"></a>00467 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
478 |
<a name="l00468"></a>00468 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
479 |
<a name="l00469"></a>00469 <span class="comment">// Process a PNG image data</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
480 |
<a name="l00470"></a>00470 <span class="keywordtype">void</span> CPngReadCodec::DoProcessDataL(<span class="keyword">const</span> TUint8*& aDataPtr,<span class="keyword">const</span> TUint8* aDataPtrLimit) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
481 |
<a name="l00471"></a>00471 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
482 |
<a name="l00472"></a>00472 <span class="comment">// Data is passed to the decompressor</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
483 |
<a name="l00473"></a>00473 TInt bytesToProcess = Min(aDataPtrLimit - aDataPtr,iChunkBytesRemaining); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
484 |
<a name="l00474"></a>00474 iDataDes.Set(aDataPtr,bytesToProcess); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
485 |
<a name="l00475"></a>00475 iDecompressor->SetInput(iDataDes); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
486 |
<a name="l00476"></a>00476 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
487 |
<a name="l00477"></a>00477 <span class="keywordflow">while</span> (iDecompressor->AvailIn() > 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
488 |
<a name="l00478"></a>00478 iDecompressor->InflateL(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
489 |
<a name="l00479"></a>00479 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
490 |
<a name="l00480"></a>00480 aDataPtr += bytesToProcess; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
491 |
<a name="l00481"></a>00481 iChunkBytesRemaining -= bytesToProcess; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
492 |
<a name="l00482"></a>00482 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
493 |
<a name="l00483"></a>00483 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
494 |
<a name="l00484"></a>00484 <span class="comment">// From MEZBufferManager: manage decompressor stream</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
495 |
<a name="l00485"></a>00485 <span class="keywordtype">void</span> CPngReadCodec::InitializeL(CEZZStream& aZStream) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
496 |
<a name="l00486"></a>00486 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
497 |
<a name="l00487"></a>00487 aZStream.SetOutput(iDecoder->FirstBuffer()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
498 |
<a name="l00488"></a>00488 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
499 |
<a name="l00489"></a>00489 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
500 |
<a name="l00490"></a>00490 <span class="keywordtype">void</span> CPngReadCodec::NeedInputL(CEZZStream& <span class="comment">/*aZStream*/</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
501 |
<a name="l00491"></a>00491 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
502 |
<a name="l00492"></a>00492 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
503 |
<a name="l00493"></a>00493 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
504 |
<a name="l00494"></a>00494 <span class="keywordtype">void</span> CPngReadCodec::NeedOutputL(CEZZStream& aZStream) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
505 |
<a name="l00495"></a>00495 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
506 |
<a name="l00496"></a>00496 aZStream.SetOutput(iDecoder->DecodeL()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
507 |
<a name="l00497"></a>00497 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
508 |
<a name="l00498"></a>00498 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
509 |
<a name="l00499"></a>00499 <span class="keywordtype">void</span> CPngReadCodec::FinalizeL(CEZZStream& <span class="comment">/*aZStream*/</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
510 |
<a name="l00500"></a>00500 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
511 |
<a name="l00501"></a>00501 iDecoder->DecodeL(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
512 |
<a name="l00502"></a>00502 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
513 |
<a name="l00503"></a>00503 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
514 |
<a name="l00504"></a>00504 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
515 |
<a name="l00505"></a>00505 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
516 |
<a name="l00506"></a>00506 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
517 |
<a name="l00507"></a>00507 <span class="comment">// CPngWriteCodec: writes a PNG image</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
518 |
<a name="l00508"></a>00508 <span class="comment">//</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
519 |
<a name="l00509"></a>00509 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
520 |
<a name="l00510"></a>00510 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
521 |
<a name="l00511"></a>00511 CPngWriteCodec::CPngWriteCodec(TInt aBpp, TBool aColor, TBool aPaletted, TInt aCompressionLevel) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
522 |
<a name="l00512"></a>00512 : iCompressionLevel(aCompressionLevel), iCompressorPtr(NULL, 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
523 |
<a name="l00513"></a>00513 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
524 |
<a name="l00514"></a>00514 <span class="comment">// Set bpp</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
525 |
<a name="l00515"></a>00515 iImageInfo.iBitsPerPixel = aBpp; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
526 |
<a name="l00516"></a>00516 <span class="keywordflow">switch</span> (aBpp) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
527 |
<a name="l00517"></a>00517 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
528 |
<a name="l00518"></a>00518 <span class="keywordflow">case</span> 1: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
529 |
<a name="l00519"></a>00519 iImageInfo.iBitDepth = 1; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
530 |
<a name="l00520"></a>00520 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
531 |
<a name="l00521"></a>00521 <span class="keywordflow">case</span> 2: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
532 |
<a name="l00522"></a>00522 iImageInfo.iBitDepth = 2; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
533 |
<a name="l00523"></a>00523 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
534 |
<a name="l00524"></a>00524 <span class="keywordflow">case</span> 4: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
535 |
<a name="l00525"></a>00525 iImageInfo.iBitDepth = 4; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
536 |
<a name="l00526"></a>00526 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
537 |
<a name="l00527"></a>00527 <span class="keywordflow">case</span> 8: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
538 |
<a name="l00528"></a>00528 <span class="keywordflow">case</span> 24: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
539 |
<a name="l00529"></a>00529 iImageInfo.iBitDepth = 8; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
540 |
<a name="l00530"></a>00530 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
541 |
<a name="l00531"></a>00531 <span class="keywordflow">default</span>: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
542 |
<a name="l00532"></a>00532 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
543 |
<a name="l00533"></a>00533 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
544 |
<a name="l00534"></a>00534 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
545 |
<a name="l00535"></a>00535 <span class="comment">// Set color type</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
546 |
<a name="l00536"></a>00536 <span class="keywordflow">if</span> (aColor && aPaletted) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
547 |
<a name="l00537"></a>00537 iImageInfo.iColorType = TPngImageInformation::EIndexedColor; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
548 |
<a name="l00538"></a>00538 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (aColor) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
549 |
<a name="l00539"></a>00539 iImageInfo.iColorType = TPngImageInformation::EDirectColor; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
550 |
<a name="l00540"></a>00540 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
551 |
<a name="l00541"></a>00541 iImageInfo.iColorType = TPngImageInformation::EGrayscale; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
552 |
<a name="l00542"></a>00542 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
553 |
<a name="l00543"></a>00543 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
554 |
<a name="l00544"></a>00544 CPngWriteCodec::~CPngWriteCodec() |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
555 |
<a name="l00545"></a>00545 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
556 |
<a name="l00546"></a>00546 <span class="keyword">delete</span> iCompressor; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
557 |
<a name="l00547"></a>00547 <span class="keyword">delete</span> iEncoder; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
558 |
<a name="l00548"></a>00548 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
559 |
<a name="l00549"></a>00549 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
560 |
<a name="l00550"></a>00550 <span class="comment">// Called by framework at start of conversion operation</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
561 |
<a name="l00551"></a>00551 <span class="keywordtype">void</span> CPngWriteCodec::InitFrameL(TBufPtr8& aDst, <span class="keyword">const</span> CFbsBitmap& aSource) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
562 |
<a name="l00552"></a>00552 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
563 |
<a name="l00553"></a>00553 <span class="keywordflow">if</span> (aDst.Length() == 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
564 |
<a name="l00554"></a>00554 User::Leave(KErrArgument); <span class="comment">// Not enough length for anything</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
565 |
<a name="l00555"></a>00555 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
566 |
<a name="l00556"></a>00556 SetSource(&aSource); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
567 |
<a name="l00557"></a>00557 iDestStartPtr = <span class="keyword">const_cast<</span>TUint8*<span class="keyword">></span>(aDst.Ptr()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
568 |
<a name="l00558"></a>00558 iDestPtr = iDestStartPtr; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
569 |
<a name="l00559"></a>00559 iDestPtrLimit = iDestPtr + aDst.MaxLength(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
570 |
<a name="l00560"></a>00560 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
571 |
<a name="l00561"></a>00561 <span class="comment">// Set image information</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
572 |
<a name="l00562"></a>00562 <span class="keyword">const</span> SEpocBitmapHeader& header = aSource.Header(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
573 |
<a name="l00563"></a>00563 iImageInfo.iSize = header.iSizeInPixels; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
574 |
<a name="l00564"></a>00564 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
575 |
<a name="l00565"></a>00565 <span class="keywordflow">switch</span> (iImageInfo.iBitDepth) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
576 |
<a name="l00566"></a>00566 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
577 |
<a name="l00567"></a>00567 <span class="keywordflow">case</span> 1: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
578 |
<a name="l00568"></a>00568 <span class="keywordflow">case</span> 2: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
579 |
<a name="l00569"></a>00569 <span class="keywordflow">case</span> 4: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
580 |
<a name="l00570"></a>00570 <span class="keywordflow">if</span> (iImageInfo.iColorType == TPngImageInformation::EDirectColor) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
581 |
<a name="l00571"></a>00571 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
582 |
<a name="l00572"></a>00572 <span class="comment">// Bit depths 1, 2 and 4 don't support RGB colour (color mode 2)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
583 |
<a name="l00573"></a>00573 <span class="comment">// Must use paletted colour or greyscale</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
584 |
<a name="l00574"></a>00574 User::Leave(KErrNotSupported); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
585 |
<a name="l00575"></a>00575 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
586 |
<a name="l00576"></a>00576 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
587 |
<a name="l00577"></a>00577 <span class="comment">// fall through to case 8</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
588 |
<a name="l00578"></a>00578 <span class="keywordflow">case</span> 8: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
589 |
<a name="l00579"></a>00579 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
590 |
<a name="l00580"></a>00580 <span class="keywordflow">default</span>: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
591 |
<a name="l00581"></a>00581 User::Leave(KErrNotSupported); <span class="comment">// unsupported bit depth</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
592 |
<a name="l00582"></a>00582 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
593 |
<a name="l00583"></a>00583 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
594 |
<a name="l00584"></a>00584 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
595 |
<a name="l00585"></a>00585 iImageInfo.iCompressionMethod = TPngImageInformation::EDeflateInflate32K; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
596 |
<a name="l00586"></a>00586 iImageInfo.iFilterMethod = TPngImageInformation::EAdaptiveFiltering; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
597 |
<a name="l00587"></a>00587 iImageInfo.iInterlaceMethod = TPngImageInformation::ENoInterlace; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
598 |
<a name="l00588"></a>00588 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
599 |
<a name="l00589"></a>00589 <span class="comment">// Create encoder</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
600 |
<a name="l00590"></a>00590 <span class="keywordflow">if</span> (iEncoder) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
601 |
<a name="l00591"></a>00591 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
602 |
<a name="l00592"></a>00592 <span class="keyword">delete</span> iEncoder; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
603 |
<a name="l00593"></a>00593 iEncoder = NULL; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
604 |
<a name="l00594"></a>00594 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
605 |
<a name="l00595"></a>00595 iEncoder = CPngWriteSubCodec::NewL(iImageInfo, &aSource); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
606 |
<a name="l00596"></a>00596 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
607 |
<a name="l00597"></a>00597 <span class="comment">// Create compressor</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
608 |
<a name="l00598"></a>00598 <span class="keywordflow">if</span> (iCompressor) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
609 |
<a name="l00599"></a>00599 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
610 |
<a name="l00600"></a>00600 <span class="keyword">delete</span> iCompressor; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
611 |
<a name="l00601"></a>00601 iCompressor = NULL; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
612 |
<a name="l00602"></a>00602 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
613 |
<a name="l00603"></a>00603 iCompressor = CEZCompressor::NewL(*<span class="keyword">this</span>, iCompressionLevel); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
614 |
<a name="l00604"></a>00604 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
615 |
<a name="l00605"></a>00605 <span class="comment">// Initial encoder state</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
616 |
<a name="l00606"></a>00606 <span class="keywordflow">if</span> (iImageInfo.iColorType == TPngImageInformation::EIndexedColor) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
617 |
<a name="l00607"></a>00607 iEncoderState = EPngWritePLTE; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
618 |
<a name="l00608"></a>00608 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
619 |
<a name="l00609"></a>00609 iEncoderState = EPngDeflate; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
620 |
<a name="l00610"></a>00610 iCallAgain = ETrue; <span class="comment">// to make sure we call DeflateL</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
621 |
<a name="l00611"></a>00611 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
622 |
<a name="l00612"></a>00612 <span class="comment">// Write header</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
623 |
<a name="l00613"></a>00613 User::LeaveIfError(WriteHeaderChunk(aDst)); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
624 |
<a name="l00614"></a>00614 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
625 |
<a name="l00615"></a>00615 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
626 |
<a name="l00616"></a>00616 <span class="comment">// Called by the framework to process frame data</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
627 |
<a name="l00617"></a>00617 TFrameState CPngWriteCodec::ProcessFrameL(TBufPtr8& aDst) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
628 |
<a name="l00618"></a>00618 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
629 |
<a name="l00619"></a>00619 <span class="keywordflow">if</span> (aDst.Length() == 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
630 |
<a name="l00620"></a>00620 User::Leave(KErrArgument); <span class="comment">// Not enough length for anything</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
631 |
<a name="l00621"></a>00621 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
632 |
<a name="l00622"></a>00622 TFrameState state = EFrameIncomplete; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
633 |
<a name="l00623"></a>00623 iDestStartPtr = <span class="keyword">const_cast<</span>TUint8*<span class="keyword">></span>(aDst.Ptr()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
634 |
<a name="l00624"></a>00624 iDestPtr = iDestStartPtr; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
635 |
<a name="l00625"></a>00625 iDestPtrLimit = iDestPtr + aDst.MaxLength(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
636 |
<a name="l00626"></a>00626 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
637 |
<a name="l00627"></a>00627 <span class="comment">// Set return buffer length to 0 initially</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
638 |
<a name="l00628"></a>00628 aDst.SetLength(0); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
639 |
<a name="l00629"></a>00629 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
640 |
<a name="l00630"></a>00630 <span class="keywordflow">while</span> (aDst.Length() == 0 && state != EFrameComplete) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
641 |
<a name="l00631"></a>00631 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
642 |
<a name="l00632"></a>00632 <span class="comment">// Loop round until we have some data to return or</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
643 |
<a name="l00633"></a>00633 <span class="comment">// the image is encoded</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
644 |
<a name="l00634"></a>00634 <span class="keywordflow">switch</span> (iEncoderState) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
645 |
<a name="l00635"></a>00635 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
646 |
<a name="l00636"></a>00636 <span class="keywordflow">case</span> EPngWritePLTE: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
647 |
<a name="l00637"></a>00637 WritePLTEChunk(aDst); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
648 |
<a name="l00638"></a>00638 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
649 |
<a name="l00639"></a>00639 <span class="keywordflow">case</span> EPngDeflate: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
650 |
<a name="l00640"></a>00640 DeflateEncodedDataL(aDst, state); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
651 |
<a name="l00641"></a>00641 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
652 |
<a name="l00642"></a>00642 <span class="keywordflow">case</span> EPngWriteIDAT: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
653 |
<a name="l00643"></a>00643 WriteIDATChunk(aDst); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
654 |
<a name="l00644"></a>00644 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
655 |
<a name="l00645"></a>00645 <span class="keywordflow">case</span> EPngFlush: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
656 |
<a name="l00646"></a>00646 FlushCompressedDataL(aDst, state); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
657 |
<a name="l00647"></a>00647 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
658 |
<a name="l00648"></a>00648 <span class="keywordflow">case</span> EPngEndChunk: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
659 |
<a name="l00649"></a>00649 WriteEndChunk(aDst); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
660 |
<a name="l00650"></a>00650 state = EFrameComplete; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
661 |
<a name="l00651"></a>00651 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
662 |
<a name="l00652"></a>00652 <span class="keywordflow">default</span>: |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
663 |
<a name="l00653"></a>00653 <span class="keywordflow">break</span>; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
664 |
<a name="l00654"></a>00654 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
665 |
<a name="l00655"></a>00655 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
666 |
<a name="l00656"></a>00656 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
667 |
<a name="l00657"></a>00657 <span class="keywordflow">return</span> state; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
668 |
<a name="l00658"></a>00658 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
669 |
<a name="l00659"></a>00659 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
670 |
<a name="l00660"></a>00660 <span class="comment">// Write a compressed image data chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
671 |
<a name="l00661"></a>00661 <span class="keywordtype">void</span> CPngWriteCodec::DeflateEncodedDataL(TBufPtr8& aDst, TFrameState& <span class="comment">/*aState*/</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
672 |
<a name="l00662"></a>00662 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
673 |
<a name="l00663"></a>00663 <span class="comment">// Set ptr for compressed data</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
674 |
<a name="l00664"></a>00664 <span class="keyword">const</span> TInt dataLength = aDst.MaxLength() - KPngChunkLengthSize - KPngChunkIdSize - KPngChunkCRCSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
675 |
<a name="l00665"></a>00665 ASSERT(dataLength > 0); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
676 |
<a name="l00666"></a>00666 iCompressorPtr.Set(iDestPtr + KPngChunkIdSize + KPngChunkLengthSize, dataLength, dataLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
677 |
<a name="l00667"></a>00667 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
678 |
<a name="l00668"></a>00668 <span class="comment">// Initialise input/output for compressor</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
679 |
<a name="l00669"></a>00669 iCompressor->SetInput(iEncoder->EncodeL(iScanline)); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
680 |
<a name="l00670"></a>00670 iScanline++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
681 |
<a name="l00671"></a>00671 iCompressor->SetOutput(iCompressorPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
682 |
<a name="l00672"></a>00672 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
683 |
<a name="l00673"></a>00673 <span class="keywordflow">while</span> ((iEncoderState == EPngDeflate) && iCallAgain) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
684 |
<a name="l00674"></a>00674 iCallAgain = iCompressor->DeflateL(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
685 |
<a name="l00675"></a>00675 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
686 |
<a name="l00676"></a>00676 <span class="comment">// Write the IDAT chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
687 |
<a name="l00677"></a>00677 WriteIDATChunk(aDst); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
688 |
<a name="l00678"></a>00678 iEncoderState = EPngFlush; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
689 |
<a name="l00679"></a>00679 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
690 |
<a name="l00680"></a>00680 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
691 |
<a name="l00681"></a>00681 <span class="keywordtype">void</span> CPngWriteCodec::FlushCompressedDataL(TBufPtr8& aDst, TFrameState& <span class="comment">/*aState*/</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
692 |
<a name="l00682"></a>00682 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
693 |
<a name="l00683"></a>00683 <span class="keywordflow">if</span> (iCallAgain) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
694 |
<a name="l00684"></a>00684 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
695 |
<a name="l00685"></a>00685 iCallAgain = iCompressor->DeflateL(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
696 |
<a name="l00686"></a>00686 WriteIDATChunk(aDst); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
697 |
<a name="l00687"></a>00687 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
698 |
<a name="l00688"></a>00688 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
699 |
<a name="l00689"></a>00689 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
700 |
<a name="l00690"></a>00690 iEncoderState = EPngEndChunk; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
701 |
<a name="l00691"></a>00691 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
702 |
<a name="l00692"></a>00692 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
703 |
<a name="l00693"></a>00693 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
704 |
<a name="l00694"></a>00694 <span class="comment">// Write a PLTE chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
705 |
<a name="l00695"></a>00695 <span class="keywordtype">void</span> CPngWriteCodec::WritePLTEChunk(TBufPtr8& aDst) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
706 |
<a name="l00696"></a>00696 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
707 |
<a name="l00697"></a>00697 ASSERT(iEncoder->Palette() && |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
708 |
<a name="l00698"></a>00698 (iImageInfo.iColorType == TPngImageInformation::EIndexedColor || |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
709 |
<a name="l00699"></a>00699 iImageInfo.iColorType == TPngImageInformation::EDirectColor || |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
710 |
<a name="l00700"></a>00700 iImageInfo.iColorType == TPngImageInformation::EAlphaDirectColor)); <span class="comment">// allowed color types for PLTE chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
711 |
<a name="l00701"></a>00701 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
712 |
<a name="l00702"></a>00702 <span class="comment">// Get palette entries</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
713 |
<a name="l00703"></a>00703 CPalette* palette = iEncoder->Palette(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
714 |
<a name="l00704"></a>00704 ASSERT(palette); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
715 |
<a name="l00705"></a>00705 <span class="keyword">const</span> TInt count = palette->Entries(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
716 |
<a name="l00706"></a>00706 TUint8* ptr = iDestPtr + KPngChunkIdSize + KPngChunkLengthSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
717 |
<a name="l00707"></a>00707 TInt length = count * 3; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
718 |
<a name="l00708"></a>00708 TPtr8 data(ptr, length, length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
719 |
<a name="l00709"></a>00709 <span class="keywordflow">for</span> (TInt i=0; i < count; i++) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
720 |
<a name="l00710"></a>00710 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
721 |
<a name="l00711"></a>00711 TRgb rgb = palette->GetEntry(i); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
722 |
<a name="l00712"></a>00712 *ptr = TUint8(rgb.Red()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
723 |
<a name="l00713"></a>00713 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
724 |
<a name="l00714"></a>00714 *ptr = TUint8(rgb.Green()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
725 |
<a name="l00715"></a>00715 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
726 |
<a name="l00716"></a>00716 *ptr = TUint8(rgb.Blue()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
727 |
<a name="l00717"></a>00717 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
728 |
<a name="l00718"></a>00718 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
729 |
<a name="l00719"></a>00719 <span class="comment">// Write PLTE chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
730 |
<a name="l00720"></a>00720 WritePngChunk(iDestPtr, KPngPLTEChunkId, data, length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
731 |
<a name="l00721"></a>00721 ASSERT(length % 3 == 0); <span class="comment">// length must be divisible by 3</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
732 |
<a name="l00722"></a>00722 aDst.SetLength(length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
733 |
<a name="l00723"></a>00723 iEncoderState = EPngDeflate; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
734 |
<a name="l00724"></a>00724 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
735 |
<a name="l00725"></a>00725 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
736 |
<a name="l00726"></a>00726 <span class="comment">// Write a data chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
737 |
<a name="l00727"></a>00727 <span class="keywordtype">void</span> CPngWriteCodec::WriteIDATChunk(TBufPtr8& aDst) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
738 |
<a name="l00728"></a>00728 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
739 |
<a name="l00729"></a>00729 TPtrC8 ptr(iCompressor->OutputDescriptor()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
740 |
<a name="l00730"></a>00730 <span class="keywordflow">if</span> (ptr.Length()) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
741 |
<a name="l00731"></a>00731 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
742 |
<a name="l00732"></a>00732 TInt length = 0; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
743 |
<a name="l00733"></a>00733 WritePngChunk(iDestPtr, KPngIDATChunkId, ptr, length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
744 |
<a name="l00734"></a>00734 aDst.SetLength(length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
745 |
<a name="l00735"></a>00735 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
746 |
<a name="l00736"></a>00736 <span class="comment">// New output can write to the same compressor ptr</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
747 |
<a name="l00737"></a>00737 iCompressor->SetOutput(iCompressorPtr); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
748 |
<a name="l00738"></a>00738 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
749 |
<a name="l00739"></a>00739 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
750 |
<a name="l00740"></a>00740 <span class="keywordflow">if</span> (iCallAgain) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
751 |
<a name="l00741"></a>00741 iEncoderState = EPngFlush; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
752 |
<a name="l00742"></a>00742 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
753 |
<a name="l00743"></a>00743 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
754 |
<a name="l00744"></a>00744 <span class="comment">// Write an END chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
755 |
<a name="l00745"></a>00745 <span class="keywordtype">void</span> CPngWriteCodec::WriteEndChunk(TBufPtr8& aDst) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
756 |
<a name="l00746"></a>00746 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
757 |
<a name="l00747"></a>00747 <span class="comment">// Write IEND chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
758 |
<a name="l00748"></a>00748 TInt length = 0; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
759 |
<a name="l00749"></a>00749 WritePngChunk(iDestPtr, KPngIENDChunkId, KNullDesC8, length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
760 |
<a name="l00750"></a>00750 aDst.SetLength(length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
761 |
<a name="l00751"></a>00751 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
762 |
<a name="l00752"></a>00752 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
763 |
<a name="l00753"></a>00753 <span class="comment">// Write a header chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
764 |
<a name="l00754"></a>00754 TInt CPngWriteCodec::WriteHeaderChunk(TBufPtr8& aDst) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
765 |
<a name="l00755"></a>00755 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
766 |
<a name="l00756"></a>00756 <span class="comment">// Write signature</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
767 |
<a name="l00757"></a>00757 Mem::Copy(iDestPtr, &KPngSignature[0], KPngFileSignatureLength); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
768 |
<a name="l00758"></a>00758 iDestPtr += KPngFileSignatureLength; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
769 |
<a name="l00759"></a>00759 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
770 |
<a name="l00760"></a>00760 <span class="comment">// Write IHDR chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
771 |
<a name="l00761"></a>00761 TBuf8<KPngIHDRChunkSize> buffer; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
772 |
<a name="l00762"></a>00762 TUint8* ptr = <span class="keyword">const_cast<</span>TUint8*<span class="keyword">></span>(buffer.Ptr()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
773 |
<a name="l00763"></a>00763 <span class="comment">// Set length of data</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
774 |
<a name="l00764"></a>00764 buffer.SetLength(KPngIHDRChunkSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
775 |
<a name="l00765"></a>00765 <span class="comment">// Chunk data</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
776 |
<a name="l00766"></a>00766 <span class="comment">// width (4 bytes)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
777 |
<a name="l00767"></a>00767 <span class="keywordflow">if</span> ((iImageInfo.iSize.iWidth == 0) || |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
778 |
<a name="l00768"></a>00768 (static_cast<TUint>(iImageInfo.iSize.iWidth) > KPngMaxImageSize)) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
779 |
<a name="l00769"></a>00769 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
780 |
<a name="l00770"></a>00770 <span class="keywordflow">return</span> KErrArgument; <span class="comment">// invalid width</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
781 |
<a name="l00771"></a>00771 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
782 |
<a name="l00772"></a>00772 PtrWriteUtil::WriteBigEndianInt32(ptr, iImageInfo.iSize.iWidth); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
783 |
<a name="l00773"></a>00773 ptr += 4; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
784 |
<a name="l00774"></a>00774 <span class="comment">// height (4 bytes)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
785 |
<a name="l00775"></a>00775 <span class="keywordflow">if</span> ((iImageInfo.iSize.iHeight == 0) || |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
786 |
<a name="l00776"></a>00776 (static_cast<TUint>(iImageInfo.iSize.iHeight) > KPngMaxImageSize)) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
787 |
<a name="l00777"></a>00777 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
788 |
<a name="l00778"></a>00778 <span class="keywordflow">return</span> KErrArgument; <span class="comment">// invalid height</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
789 |
<a name="l00779"></a>00779 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
790 |
<a name="l00780"></a>00780 PtrWriteUtil::WriteBigEndianInt32(ptr, iImageInfo.iSize.iHeight); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
791 |
<a name="l00781"></a>00781 ptr += 4; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
792 |
<a name="l00782"></a>00782 <span class="comment">// bit depth (1 byte)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
793 |
<a name="l00783"></a>00783 PtrWriteUtil::WriteInt8(ptr, iImageInfo.iBitDepth); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
794 |
<a name="l00784"></a>00784 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
795 |
<a name="l00785"></a>00785 <span class="comment">// colour type (1 byte)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
796 |
<a name="l00786"></a>00786 PtrWriteUtil::WriteInt8(ptr, iImageInfo.iColorType); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
797 |
<a name="l00787"></a>00787 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
798 |
<a name="l00788"></a>00788 <span class="comment">// compression method (1 byte)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
799 |
<a name="l00789"></a>00789 PtrWriteUtil::WriteInt8(ptr, iImageInfo.iCompressionMethod); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
800 |
<a name="l00790"></a>00790 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
801 |
<a name="l00791"></a>00791 <span class="comment">// filter method (1 byte)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
802 |
<a name="l00792"></a>00792 PtrWriteUtil::WriteInt8(ptr, iImageInfo.iFilterMethod); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
803 |
<a name="l00793"></a>00793 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
804 |
<a name="l00794"></a>00794 <span class="comment">// interlace method (1 byte)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
805 |
<a name="l00795"></a>00795 PtrWriteUtil::WriteInt8(ptr, iImageInfo.iInterlaceMethod); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
806 |
<a name="l00796"></a>00796 ptr++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
807 |
<a name="l00797"></a>00797 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
808 |
<a name="l00798"></a>00798 TInt length = 0; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
809 |
<a name="l00799"></a>00799 WritePngChunk(iDestPtr, KPngIHDRChunkId, buffer, length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
810 |
<a name="l00800"></a>00800 aDst.SetLength(KPngFileSignatureLength + length); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
811 |
<a name="l00801"></a>00801 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
812 |
<a name="l00802"></a>00802 <span class="keywordflow">return</span> KErrNone; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
813 |
<a name="l00803"></a>00803 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
814 |
<a name="l00804"></a>00804 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
815 |
<a name="l00805"></a>00805 <span class="comment">// Chunk writing helper function</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
816 |
<a name="l00806"></a>00806 <span class="keywordtype">void</span> CPngWriteCodec::WritePngChunk(TUint8*& aDestPtr, <span class="keyword">const</span> TDesC8& aChunkId, <span class="keyword">const</span> TDesC8& aData, TInt& aLength) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
817 |
<a name="l00807"></a>00807 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
818 |
<a name="l00808"></a>00808 <span class="comment">// Chunk length (4 bytes)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
819 |
<a name="l00809"></a>00809 PtrWriteUtil::WriteBigEndianInt32(aDestPtr, aData.Length()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
820 |
<a name="l00810"></a>00810 aDestPtr += KPngChunkLengthSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
821 |
<a name="l00811"></a>00811 TUint8* crcPtr = aDestPtr; <span class="comment">// start position for calculating CRC</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
822 |
<a name="l00812"></a>00812 <span class="comment">// Chunk type (4 bytes)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
823 |
<a name="l00813"></a>00813 Mem::Copy(aDestPtr, aChunkId.Ptr(), KPngChunkIdSize); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
824 |
<a name="l00814"></a>00814 aDestPtr += KPngChunkIdSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
825 |
<a name="l00815"></a>00815 <span class="comment">// Chunk data (0...n bytes)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
826 |
<a name="l00816"></a>00816 Mem::Copy(aDestPtr, aData.Ptr(), aData.Length()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
827 |
<a name="l00817"></a>00817 aDestPtr += aData.Length(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
828 |
<a name="l00818"></a>00818 <span class="comment">// CRC (4 bytes)</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
829 |
<a name="l00819"></a>00819 TUint32 crc = KPngCrcMask; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
830 |
<a name="l00820"></a>00820 GetCrc(crc, crcPtr, KPngChunkIdSize + aData.Length()); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
831 |
<a name="l00821"></a>00821 crc ^= KPngCrcMask; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
832 |
<a name="l00822"></a>00822 PtrWriteUtil::WriteBigEndianInt32(aDestPtr, crc); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
833 |
<a name="l00823"></a>00823 aDestPtr += KPngChunkCRCSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
834 |
<a name="l00824"></a>00824 <span class="comment">// Length of chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
835 |
<a name="l00825"></a>00825 aLength = KPngChunkLengthSize + KPngChunkIdSize + aData.Length() + KPngChunkCRCSize; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
836 |
<a name="l00826"></a>00826 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
837 |
<a name="l00827"></a>00827 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
838 |
<a name="l00828"></a>00828 <span class="comment">// from MEZBufferManager, manage data compressor</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
839 |
<a name="l00829"></a>00829 <span class="keywordtype">void</span> CPngWriteCodec::InitializeL(CEZZStream& <span class="comment">/*aZStream*/</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
840 |
<a name="l00830"></a>00830 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
841 |
<a name="l00831"></a>00831 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
842 |
<a name="l00832"></a>00832 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
843 |
<a name="l00833"></a>00833 <span class="keywordtype">void</span> CPngWriteCodec::NeedInputL(CEZZStream& aZStream) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
844 |
<a name="l00834"></a>00834 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
845 |
<a name="l00835"></a>00835 <span class="comment">// Give compressor more data from encoder</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
846 |
<a name="l00836"></a>00836 aZStream.SetInput(iEncoder->EncodeL(iScanline)); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
847 |
<a name="l00837"></a>00837 <span class="keywordflow">if</span> (iCompressor->AvailIn() != 0) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
848 |
<a name="l00838"></a>00838 iScanline++; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
849 |
<a name="l00839"></a>00839 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
850 |
<a name="l00840"></a>00840 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
851 |
<a name="l00841"></a>00841 <span class="keywordtype">void</span> CPngWriteCodec::NeedOutputL(CEZZStream& <span class="comment">/*aZStream*/</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
852 |
<a name="l00842"></a>00842 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
853 |
<a name="l00843"></a>00843 <span class="comment">// Signal to write an IDAT chunk</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
854 |
<a name="l00844"></a>00844 iEncoderState = EPngWriteIDAT; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
855 |
<a name="l00845"></a>00845 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
856 |
<a name="l00846"></a>00846 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
857 |
<a name="l00847"></a>00847 <span class="keywordtype">void</span> CPngWriteCodec::FinalizeL(CEZZStream& <span class="comment">/*aZStream*/</span>) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
858 |
<a name="l00848"></a>00848 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
859 |
<a name="l00849"></a>00849 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
860 |
<a name="l00850"></a>00850 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
861 |
<a name="l00851"></a>00851 <span class="comment">// Calculate CRC for PNG chunks</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
862 |
<a name="l00852"></a>00852 <span class="keywordtype">void</span> CPngWriteCodec::GetCrc(TUint32& aCrc, <span class="keyword">const</span> TUint8* aPtr, <span class="keyword">const</span> TInt aLength) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
863 |
<a name="l00853"></a>00853 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
864 |
<a name="l00854"></a>00854 <span class="keywordflow">if</span> (!iCrcTableCalculated) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
865 |
<a name="l00855"></a>00855 CalcCrcTable(); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
866 |
<a name="l00856"></a>00856 TUint32 code = aCrc; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
867 |
<a name="l00857"></a>00857 <span class="keywordflow">for</span> (TInt i=0; i < aLength; i++) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
868 |
<a name="l00858"></a>00858 code = iCrcTable[(code ^ aPtr[i]) & 0xff] ^ (code >> 8); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
869 |
<a name="l00859"></a>00859 aCrc = code; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
870 |
<a name="l00860"></a>00860 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
871 |
<a name="l00861"></a>00861 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
872 |
<a name="l00862"></a>00862 <span class="keywordtype">void</span> CPngWriteCodec::CalcCrcTable() |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
873 |
<a name="l00863"></a>00863 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
874 |
<a name="l00864"></a>00864 <span class="keywordflow">for</span> (TInt i=0; i < KPngCrcTableLength; i++) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
875 |
<a name="l00865"></a>00865 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
876 |
<a name="l00866"></a>00866 TUint32 code = <span class="keyword">static_cast<</span>TUint32<span class="keyword">></span>(i); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
877 |
<a name="l00867"></a>00867 |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
878 |
<a name="l00868"></a>00868 <span class="keywordflow">for</span> (TInt j = 0; j < 8; j++) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
879 |
<a name="l00869"></a>00869 { |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
880 |
<a name="l00870"></a>00870 <span class="keywordflow">if</span> (code & 1) |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
881 |
<a name="l00871"></a>00871 code = 0xedb88320 ^ (code >> 1); |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
882 |
<a name="l00872"></a>00872 <span class="keywordflow">else</span> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
883 |
<a name="l00873"></a>00873 code = code >> 1; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
884 |
<a name="l00874"></a>00874 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
885 |
<a name="l00875"></a>00875 iCrcTable[i] = code; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
886 |
<a name="l00876"></a>00876 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
887 |
<a name="l00877"></a>00877 iCrcTableCalculated = ETrue; |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
888 |
<a name="l00878"></a>00878 } |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
889 |
</pre></div></div> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
890 |
<hr size="1"/><address style="text-align: right;"><small>Generated by |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
891 |
<a href="http://www.doxygen.org/index.html"> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
892 |
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
893 |
</body> |
43e37759235e
Week 12 contribution of example code"
Dominic Pinkman <Dominic.Pinkman@Nokia.com>
parents:
diff
changeset
|
894 |
</html> |