2 * Copyright (C) 2010 ZXing authors
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * These authors would like to acknowledge the Spanish Ministry of Industry,
19 * Tourism and Trade, for the support in the project TSI020301-2008-2
20 * "PIRAmIDE: Personalizable Interactions with Resources on AmI-enabled
21 * Mobile Dynamic Environments", led by Treelogic
22 * ( http://www.treelogic.com/ ):
24 * http://www.piramidepse.com/
27 package com.google.zxing.oned.rss.expanded;
29 import java.awt.image.BufferedImage;
31 import java.util.Vector;
33 import javax.imageio.ImageIO;
35 import com.google.zxing.BinaryBitmap;
36 import com.google.zxing.NotFoundException;
37 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
38 import com.google.zxing.common.BitArray;
39 import com.google.zxing.common.GlobalHistogramBinarizer;
40 import com.google.zxing.oned.rss.DataCharacter;
41 import com.google.zxing.oned.rss.FinderPattern;
43 import junit.framework.TestCase;
46 * @author Pablo Orduña, University of Deusto (pablo.orduna@deusto.es)
47 * @author Eduardo Castillejo, University of Deusto (eduardo.castillejo@deusto.es)
49 public final class RSSExpandedInternalTestCase extends TestCase {
51 public void testFindFinderPatterns() throws Exception{
52 RSSExpandedReader rssExpandedReader = new RSSExpandedReader();
54 String path = "test/data/blackbox/rssexpanded-1/2.jpg";
55 BufferedImage image = ImageIO.read(new File(path));
56 BinaryBitmap binaryMap = new BinaryBitmap(new GlobalHistogramBinarizer(new BufferedImageLuminanceSource(image)));
57 int rowNumber = binaryMap.getHeight() / 2;
58 BitArray row = binaryMap.getBlackRow(rowNumber, null);
59 Vector<ExpandedPair> previousPairs = new Vector<ExpandedPair>();
61 ExpandedPair pair1 = rssExpandedReader.retrieveNextPair(row, previousPairs, rowNumber);
62 previousPairs.add(pair1);
63 assertEquals(0, pair1.getFinderPattern().getValue());
64 assertFalse(pair1.mayBeLast());
66 ExpandedPair pair2 = rssExpandedReader.retrieveNextPair(row, previousPairs, rowNumber);
67 previousPairs.add(pair2);
68 assertEquals(1, pair2.getFinderPattern().getValue());
69 assertFalse(pair2.mayBeLast());
71 ExpandedPair pair3 = rssExpandedReader.retrieveNextPair(row, previousPairs, rowNumber);
72 previousPairs.add(pair3);
73 assertEquals(1, pair3.getFinderPattern().getValue());
74 assertTrue(pair3.mayBeLast());
77 rssExpandedReader.retrieveNextPair(row, previousPairs, rowNumber);
78 // the previous was the last pair
79 fail(NotFoundException.class.getName() + " expected");
80 }catch(NotFoundException nfe){
85 public void testRetrieveNextPairPatterns() throws Exception{
86 RSSExpandedReader rssExpandedReader = new RSSExpandedReader();
88 String path = "test/data/blackbox/rssexpanded-1/3.jpg";
89 BufferedImage image = ImageIO.read(new File(path));
90 BinaryBitmap binaryMap = new BinaryBitmap(new GlobalHistogramBinarizer(new BufferedImageLuminanceSource(image)));
91 int rowNumber = binaryMap.getHeight() / 2;
92 BitArray row = binaryMap.getBlackRow(rowNumber, null);
93 Vector<ExpandedPair> previousPairs = new Vector<ExpandedPair>();
95 ExpandedPair pair1 = rssExpandedReader.retrieveNextPair(row, previousPairs, rowNumber);
96 previousPairs.add(pair1);
97 assertEquals(0, pair1.getFinderPattern().getValue());
98 assertFalse(pair1.mayBeLast());
100 ExpandedPair pair2 = rssExpandedReader.retrieveNextPair(row, previousPairs, rowNumber);
101 previousPairs.add(pair2);
102 assertEquals(0, pair2.getFinderPattern().getValue());
103 assertTrue(pair2.mayBeLast());
106 public void testDecodeCheckCharacter() throws Exception{
107 RSSExpandedReader rssExpandedReader = new RSSExpandedReader();
109 String path = "test/data/blackbox/rssexpanded-1/3.jpg";
110 BufferedImage image = ImageIO.read(new File(path));
111 BinaryBitmap binaryMap = new BinaryBitmap(new GlobalHistogramBinarizer(new BufferedImageLuminanceSource(image)));
112 BitArray row = binaryMap.getBlackRow(binaryMap.getHeight() / 2, null);
114 int[] startEnd = {145, 243};//image pixels where the A1 pattern starts (at 124) and ends (at 214)
116 FinderPattern finderPatternA1 = new FinderPattern(value, startEnd, startEnd[0], startEnd[1], image.getHeight() / 2);
118 DataCharacter dataCharacter = rssExpandedReader.decodeDataCharacter(row, finderPatternA1, true, true);
120 assertEquals(98, dataCharacter.getValue());
123 public void testDecodeDataCharacter() throws Exception{
124 RSSExpandedReader rssExpandedReader = new RSSExpandedReader();
126 String path = "test/data/blackbox/rssexpanded-1/3.jpg";
127 BufferedImage image = ImageIO.read(new File(path));
128 BinaryBitmap binaryMap = new BinaryBitmap(new GlobalHistogramBinarizer(new BufferedImageLuminanceSource(image)));
129 BitArray row = binaryMap.getBlackRow(binaryMap.getHeight() / 2, null);
131 int[] startEnd = {145, 243};//image pixels where the A1 pattern starts (at 124) and ends (at 214)
133 FinderPattern finderPatternA1 = new FinderPattern(value, startEnd, startEnd[0], startEnd[1], image.getHeight() / 2);
135 DataCharacter dataCharacter = rssExpandedReader.decodeDataCharacter(row, finderPatternA1, true, false);
137 assertEquals(19, dataCharacter.getValue());
138 assertEquals(1007, dataCharacter.getChecksumPortion());