Я хочу создать приложение для Android, в котором я могу делать снимки с SD-карты или с камеры. После того, как я сделал снимок, мне нужно его отредактировать, например добавить текст на изображение, обрезать изображение, добавить к изображению файл типа .gif. Сделать снимок не проблема, но я не могу понять, как написать код для редактирования изображения. Мне нужно знать, должен ли я использовать OpenGL для этого. Требуются предложения и полезные ссылки.
Редактор изображений Android
Ответы (2)
Ваш вопрос слишком расплывчатый. Я предоставляю некоторое руководство.
ОБНОВЛЕНИЕ 2020: Вы можете просматривать все библиотеки обработки изображений, перечисленные в Android Asernal https://android-arsenal.com/tag/47
Использование
Aviary SDKтеперь становится Creative SDK . Он также поддерживает iOS и WindowPhone7. Вольер предоставляет большинство функций, таких как ориентация, обрезка и резкость, эффект красных глаз, отбеливание и пятно, наклейки, рисунок, текст и мем (бета), яркость, насыщенность, контрастность и пользовательские параметры..
Creative SDK от AdobeНепосредственно обрабатывать растровое изображение.
импортировать android.graphics.Bitmap;
открытый класс ProcessingImage { частный Bitmap defaultImg; частный интервал idBitmap;
public int getIdBitmap() { return idBitmap; }
public void setIdBitmap (int idBitmap) { this.idBitmap = idBitmap; }
общественное растровое изображение getDefaultImg () { return defaultImg; }
public void setDefaultImg (Bitmap defaultImg) { this.defaultImg = defaultImg; }
общедоступный ProcessingImage () { }
общедоступная обработка растровых изображенийI(Bitmap myBitmap) { return myBitmap; }
общественное растровое изображение TintThePicture (int deg, Bitmap defaultBitmap) {
int w = defaultBitmap.getWidth(); int h = defaultBitmap.getHeight(); int[] pix = new int[w * h]; defaultBitmap.getPixels(pix, 0, w, 0, 0, w, h); double angle = (3.14159d * (double) deg) / 180.0d; int S = (int) (256.0d * Math.sin(angle)); int C = (int) (256.0d * Math.cos(angle)); int r, g, b, index; int RY, BY, RYY, GYY, BYY, R, G, B, Y; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { index = y * w + x; r = (pix[index] >> 16) & 0xff; g = (pix[index] >> 8) & 0xff; b = pix[index] & 0xff; RY = (70 * r - 59 * g - 11 * b) / 100; BY = (-30 * r - 59 * g + 89 * b) / 100; Y = (30 * r + 59 * g + 11 * b) / 100; RYY = (S * BY + C * RY) / 256; BYY = (C * BY - S * RY) / 256; GYY = (-51 * RYY - 19 * BYY) / 100; R = Y + RYY; R = (R < 0) ? 0 : ((R > 255) ? 255 : R); G = Y + GYY; G = (G < 0) ? 0 : ((G > 255) ? 255 : G); B = Y + BYY; B = (B < 0) ? 0 : ((B > 255) ? 255 : B); pix[index] = 0xff000000 | (R << 16) | (G << 8) | B; } } Bitmap bm = Bitmap.createBitmap(w, h, defaultBitmap.getConfig()); bm.setPixels(pix, 0, w, 0, 0, w, h); pix = null; return bm; } }
Использование: Обработка цвета индиго: TintThePicture(180, myBitmap);
Обработка зеленого цвета: TintThePicture(300, myBitmap);
5. Используйте android.media.effect предоставляется в API14 6. Effect Pro 7. Android-Image-Edit 8. android-image-editor 9. smartcrop-android (эта библиотека анализирует наилучшее положение и размер обрезки, вычисляя некоторые функции; край, кожа тон, телосложение и лицо.)
Во-первых, чтобы ответить на ваш вопрос, нет, вам не нужно использовать openGL. Что касается примеров, вот несколько с открытым исходным кодом:
iQuePhoto: https://github.com/iQueSoft/iQuePhoto
LeafPic: https://github.com/HoraApps/LeafPic