24 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
64 Rectangle rect1 =
new Rectangle(10, 20, 100, 150);
65 System.out.println(
"Created rectangle: x=" + rect1.getX() +
", y=" + rect1.getY() +
66 ", width=" + rect1.getWidth() +
", height=" + rect1.getHeight());
72 System.out.println(
"Rectangle X coordinate: " + x);
78 System.out.println(
"Rectangle Y coordinate: " + y);
83 int width = rect1.getWidth();
84 System.out.println(
"Rectangle width: " + width);
89 int height = rect1.getHeight();
90 System.out.println(
"Rectangle height: " + height);
94 Rectangle fullImage =
new Rectangle(0, 0, 1024, 768);
95 Rectangle topLeft =
new Rectangle(0, 0, 512, 384);
96 Rectangle center =
new Rectangle(256, 192, 512, 384);
97 Rectangle bottomRight =
new Rectangle(512, 384, 512, 384);
99 System.out.println(
"Created different rectangles for different regions");
106 if (decoder ==
null) {
107 System.err.println(
"Decoder not initialized");
112 Rectangle sampleRect =
new Rectangle(50, 50, 200, 200);
116 ImageWrapper decodedImage = decoder.decodeRegion(sampleRect, 1);
117 System.out.println(
"Decoded region: " + sampleRect.getWidth() +
"x" + sampleRect.getHeight() +
" at sample size 1");
128 if (decoder ==
null) {
132 Rectangle testRect =
new Rectangle(0, 0, 400, 300);
135 List<Float> sampleSizes = Arrays.asList(1.0f, 2.0f, 4.0f, 8.0f);
137 for (
float sampleSize : sampleSizes) {
140 ImageWrapper decodedImage = decoder.decodeRegion(testRect, sampleSize);
141 System.out.println(
"Decoded region with sample size " + sampleSize +
": " +
142 (
int)(testRect.getWidth() / sampleSize) +
"x" + (
int)(testRect.getHeight() / sampleSize));
153 if (decoder ==
null) {
158 List<Rectangle> regions = Arrays.asList(
159 new Rectangle(0, 0, 256, 256),
160 new Rectangle(256, 0, 256, 256),
161 new Rectangle(0, 256, 256, 256),
162 new Rectangle(256, 256, 256, 256)
165 System.out.println(
"=== Decoding Multiple Regions ===");
166 for (
int i = 0; i < regions.size(); i++) {
167 Rectangle region = regions.get(i);
171 ImageWrapper decodedImage = decoder.decodeRegion(region, 1);
172 System.out.println(
"Region " + (i + 1) +
": " + region.getWidth() +
"x" + region.getHeight() +
173 " at (" + region.getX() +
", " + region.getY() +
")");
195 System.out.println(
"=== Advanced BitmapRegionDecoder Features ===");
197 if (imageData ==
null) {
202 List<byte[]> imageDataList = Arrays.asList(
204 new byte[] { (byte) 0xFF, (
byte) 0xD8, (byte) 0xFF, (
byte) 0xE0 },
205 new byte[] { 0x47, 0x49, 0x46, 0x38 }
208 for (
int i = 0; i < imageDataList.size(); i++) {
212 BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(imageDataList.get(i));
213 System.out.println(
"Created decoder for image type " + (i + 1));
217 Rectangle testRect =
new Rectangle(0, 0, 100, 100);
218 ImageWrapper decodedImage = decoder.decodeRegion(testRect, 1);
219 System.out.println(
"Successfully decoded region from image type " + (i + 1));
221 }
catch (Exception e) {
222 System.err.println(
"Failed to decode image type " + (i + 1) +
": " + e.getMessage());
231 System.out.println(
"=== Error Handling ===");
234 byte[] invalidData =
new byte[] { 0x00, 0x01, 0x02, 0x03 };
239 BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(invalidData);
240 System.out.println(
"Created decoder with invalid data");
244 Rectangle rect =
new Rectangle(0, 0, 50, 50);
245 ImageWrapper image = decoder.decodeRegion(rect, 1);
246 System.out.println(
"Successfully decoded region from invalid data");
248 }
catch (Exception e) {
249 System.out.println(
"Expected error when creating decoder with invalid data: " + e.getMessage());
253 if (decoder !=
null) {
255 Rectangle invalidRect =
new Rectangle(-10, -10, 100, 100);
256 ImageWrapper image = decoder.decodeRegion(invalidRect, 1);
257 System.out.println(
"Successfully decoded region with negative coordinates");
259 }
catch (Exception e) {
260 System.out.println(
"Expected error with invalid rectangle: " + e.getMessage());
269 System.out.println(
"=== Performance Optimization ===");
271 if (decoder ==
null) {
276 Rectangle largeRect =
new Rectangle(0, 0, 800, 600);
277 List<Float> sampleSizes = Arrays.asList(1.0f, 2.0f, 4.0f, 8.0f, 16.0f);
279 for (
float sampleSize : sampleSizes) {
280 long startTime = System.currentTimeMillis();
282 ImageWrapper image = decoder.decodeRegion(largeRect, sampleSize);
284 long endTime = System.currentTimeMillis();
285 System.out.println(
"Sample size " + sampleSize +
": " + (endTime - startTime) +
"ms, " +
286 "Output size: " + image.getWidth() +
"x" + image.getHeight());
294 System.out.println(
"=== Rectangle Manipulation ===");
297 Rectangle baseRect =
new Rectangle(100, 100, 200, 150);
298 System.out.println(
"Base rectangle: " + baseRect.getX() +
", " + baseRect.getY() +
299 ", " + baseRect.getWidth() +
"x" + baseRect.getHeight());
302 List<Rectangle> variations = Arrays.asList(
303 new Rectangle(baseRect.getX(), baseRect.getY(), baseRect.getWidth() / 2, baseRect.getHeight()),
304 new Rectangle(baseRect.getX(), baseRect.getY(), baseRect.getWidth(), baseRect.getHeight() / 2),
305 new Rectangle(baseRect.getX() + 50, baseRect.getY() + 25, baseRect.getWidth() - 100, baseRect.getHeight() - 50),
306 new Rectangle(0, 0, baseRect.getWidth(), baseRect.getHeight())
309 for (
int i = 0; i < variations.size(); i++) {
310 Rectangle rect = variations.get(i);
311 System.out.println(
"Variation " + (i + 1) +
": " + rect.getX() +
", " + rect.getY() +
312 ", " + rect.getWidth() +
"x" + rect.getHeight());