aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/draw9patch/graphics/GraphicsUtilities.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/draw9patch/graphics/GraphicsUtilities.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/draw9patch/graphics/GraphicsUtilities.java169
1 files changed, 169 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/draw9patch/graphics/GraphicsUtilities.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/draw9patch/graphics/GraphicsUtilities.java
new file mode 100644
index 000000000..74c2f043e
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/draw9patch/graphics/GraphicsUtilities.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ide.eclipse.adt.internal.editors.draw9patch.graphics;
+
+import org.eclipse.swt.graphics.ImageData;
+
+/**
+ * The utility class for SWT Image and ImageData manipulation.
+ */
+public class GraphicsUtilities {
+
+ /**
+ * Convert normal image to 9-patched.
+ * @return Returns 9-patched ImageData object. If image is null, returns null.
+ */
+ public static ImageData convertToNinePatch(ImageData image) {
+ if (image == null) {
+ return null;
+ }
+ ImageData result = new ImageData(image.width + 2, image.height + 2, image.depth,
+ image.palette);
+
+ final int[] colors = new int[image.width];
+ final byte[] alpha = new byte[image.width];
+
+ for (int y = 0; y < image.height; y++) {
+
+ // Copy pixels
+ image.getPixels(0, y, image.width, colors, 0);
+ result.setPixels(1, y + 1, image.width, colors, 0);
+
+ // Copy alpha
+ image.getAlphas(0, y, image.width, alpha, 0);
+ result.setAlphas(1, y + 1, image.width, alpha, 0);
+ }
+
+ return result;
+ }
+
+ /**
+ * Wipe all color and alpha pixels.
+ */
+ public static void clearImageData(ImageData imageData) {
+ if (imageData == null) {
+ throw new IllegalArgumentException("image data must not be null");
+ }
+ int width = imageData.width;
+ int height = imageData.height;
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ imageData.setPixel(x, y, 0x00000000);
+ imageData.setAlpha(x, y, 0x00);
+ }
+ }
+ }
+
+ /**
+ * Duplicate the image data.
+ * @return If image is null, return null.
+ */
+ public static ImageData copy(ImageData image) {
+ if (image == null) {
+ return null;
+ }
+ ImageData result = new ImageData(image.width, image.height, image.depth,
+ image.palette);
+
+ final int[] colors = new int[image.width];
+ final byte[] alpha = new byte[image.width];
+
+ for (int y = 0; y < image.height; y++) {
+
+ // Copy pixels
+ image.getPixels(0, y, image.width, colors, 0);
+ result.setPixels(0, y, image.width, colors, 0);
+
+ // Copy alpha
+ image.getAlphas(0, y, image.width, alpha, 0);
+ result.setAlphas(0, y, image.width, alpha, 0);
+ }
+
+ return result;
+ }
+
+ /**
+ * Get column pixels.
+ * @return length of obtained pixels.
+ */
+ public static int getVerticalPixels(ImageData data, int x, int y, int height, int[] out) {
+ if (data == null) {
+ throw new IllegalArgumentException("data must not be null");
+ }
+ if (out == null) {
+ throw new IllegalArgumentException("out array must not be null");
+ }
+ if (height > out.length) {
+ throw new IllegalArgumentException("out array length must be > height");
+ }
+ if (data.height < (y + height)) {
+ throw new IllegalArgumentException("image height must be > (y + height)");
+ }
+ if (x < 0 || y < 0) {
+ throw new IllegalArgumentException("argument x, y must be >= 0");
+ }
+ if (x >= data.width) {
+ throw new IllegalArgumentException("argument x must be < data.width");
+ }
+ if (y >= data.height) {
+ throw new IllegalArgumentException("argument y must be < data.height");
+ }
+ if (height <= 0) {
+ throw new IllegalArgumentException("argument height must be > 0");
+ }
+
+ int idx = 0;
+ while (idx < height) {
+ data.getPixels(x, (y + idx), 1, out, idx);
+ idx++;
+ }
+ return idx;
+ }
+
+ /**
+ * Get row pixels.
+ */
+ public static void getHorizontalPixels(ImageData data, int x, int y, int width, int[] out) {
+ if (data == null) {
+ throw new IllegalArgumentException("data must not be null");
+ }
+ if (out == null) {
+ throw new IllegalArgumentException("out array must not be null");
+ }
+ if (width > out.length) {
+ throw new IllegalArgumentException("out array length must be > width");
+ }
+ if (data.width < (x + width)) {
+ throw new IllegalArgumentException("image height must be > (x + width)");
+ }
+ if (x < 0 || y < 0) {
+ throw new IllegalArgumentException("argument x, y must be >= 0");
+ }
+ if (x >= data.width) {
+ throw new IllegalArgumentException("argument x must be < data.width");
+ }
+ if (y >= data.height) {
+ throw new IllegalArgumentException("argument y must be < data.height");
+ }
+ if (width <= 0) {
+ throw new IllegalArgumentException("argument width must be > 0");
+ }
+
+ data.getPixels(x, y, width, out, 0);
+ }
+
+}