From 7ee862e3f52a6042f2c952b12f68766dd3371b82 Mon Sep 17 00:00:00 2001 From: "jamshidi.m799" Date: Fri, 19 Jun 2020 22:01:43 +0430 Subject: [PATCH 1/7] add Mono Chrome filter --- .../java/com/example/filters/MainActivity.java | 6 ++++++ .../com/zomato/photofilters/SampleFilters.java | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/example/src/main/java/com/example/filters/MainActivity.java b/example/src/main/java/com/example/filters/MainActivity.java index c3120d2..9550c10 100644 --- a/example/src/main/java/com/example/filters/MainActivity.java +++ b/example/src/main/java/com/example/filters/MainActivity.java @@ -61,6 +61,7 @@ public void run() { ThumbnailItem t4 = new ThumbnailItem(); ThumbnailItem t5 = new ThumbnailItem(); ThumbnailItem t6 = new ThumbnailItem(); + ThumbnailItem t7 = new ThumbnailItem(); t1.image = thumbImage; t2.image = thumbImage; @@ -68,6 +69,7 @@ public void run() { t4.image = thumbImage; t5.image = thumbImage; t6.image = thumbImage; + t7.image = thumbImage; ThumbnailsManager.clearThumbs(); ThumbnailsManager.addThumb(t1); // Original Image @@ -86,6 +88,10 @@ public void run() { t6.filter = SampleFilters.getNightWhisperFilter(); ThumbnailsManager.addThumb(t6); + t7.filter = SampleFilters.getMonoChromeFilter(); + ThumbnailsManager.addThumb(t7); + + List thumbs = ThumbnailsManager.processThumbs(context); ThumbnailsAdapter adapter = new ThumbnailsAdapter(thumbs, (ThumbnailCallback) activity); diff --git a/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java b/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java index 6f2a663..60a69e8 100644 --- a/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java +++ b/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java @@ -1,10 +1,16 @@ package com.zomato.photofilters; +import android.app.Application; +import android.content.Context; + import com.zomato.photofilters.geometry.Point; import com.zomato.photofilters.imageprocessors.Filter; import com.zomato.photofilters.imageprocessors.subfilters.BrightnessSubFilter; +import com.zomato.photofilters.imageprocessors.subfilters.ColorOverlaySubFilter; import com.zomato.photofilters.imageprocessors.subfilters.ContrastSubFilter; +import com.zomato.photofilters.imageprocessors.subfilters.SaturationSubFilter; import com.zomato.photofilters.imageprocessors.subfilters.ToneCurveSubFilter; +import com.zomato.photofilters.imageprocessors.subfilters.VignetteSubFilter; /** * @author Varun on 01/07/15. @@ -135,4 +141,16 @@ public static Filter getNightWhisperFilter() { filter.addSubFilter(new ToneCurveSubFilter(rgbKnots, redKnots, greenKnots, blueKnots)); return filter; } + + public static Filter getMonoChromeFilter() { + + Filter filter = new Filter(); +// filter.addSubFilter(new ToneCurveSubFilter(rgbKnots, redKnots, greenKnots, blueKnots)); +// filter.addSubFilter(new BrightnessSubFilter(-100)); + filter.addSubFilter(new SaturationSubFilter(-10)); + +// filter.addSubFilter(new ContrastSubFilter(2f)); +// filter.addSubFilter(new ColorOverlaySubFilter(4, 10F, 10F, 10F)); + return filter; + } } From 53fe0a2e41c4a8b1fbbe7ebc64b259a0d30be66a Mon Sep 17 00:00:00 2001 From: Zahra Fazel Date: Thu, 25 Jun 2020 02:08:02 +0430 Subject: [PATCH 2/7] add Violet Filter --- .../com/example/filters/MainActivity.java | 4 ++++ .../zomato/photofilters/SampleFilters.java | 24 +++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/example/src/main/java/com/example/filters/MainActivity.java b/example/src/main/java/com/example/filters/MainActivity.java index 9550c10..df83db6 100644 --- a/example/src/main/java/com/example/filters/MainActivity.java +++ b/example/src/main/java/com/example/filters/MainActivity.java @@ -62,6 +62,7 @@ public void run() { ThumbnailItem t5 = new ThumbnailItem(); ThumbnailItem t6 = new ThumbnailItem(); ThumbnailItem t7 = new ThumbnailItem(); + ThumbnailItem t8 = new ThumbnailItem(); t1.image = thumbImage; t2.image = thumbImage; @@ -70,6 +71,7 @@ public void run() { t5.image = thumbImage; t6.image = thumbImage; t7.image = thumbImage; + t8.image = thumbImage; ThumbnailsManager.clearThumbs(); ThumbnailsManager.addThumb(t1); // Original Image @@ -91,6 +93,8 @@ public void run() { t7.filter = SampleFilters.getMonoChromeFilter(); ThumbnailsManager.addThumb(t7); + t8.filter = SampleFilters.getVioletFilter(); + ThumbnailsManager.addThumb(t8); List thumbs = ThumbnailsManager.processThumbs(context); diff --git a/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java b/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java index 60a69e8..75238a6 100644 --- a/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java +++ b/photofilterssdk/src/main/java/com/zomato/photofilters/SampleFilters.java @@ -1,8 +1,5 @@ package com.zomato.photofilters; -import android.app.Application; -import android.content.Context; - import com.zomato.photofilters.geometry.Point; import com.zomato.photofilters.imageprocessors.Filter; import com.zomato.photofilters.imageprocessors.subfilters.BrightnessSubFilter; @@ -10,7 +7,6 @@ import com.zomato.photofilters.imageprocessors.subfilters.ContrastSubFilter; import com.zomato.photofilters.imageprocessors.subfilters.SaturationSubFilter; import com.zomato.photofilters.imageprocessors.subfilters.ToneCurveSubFilter; -import com.zomato.photofilters.imageprocessors.subfilters.VignetteSubFilter; /** * @author Varun on 01/07/15. @@ -153,4 +149,24 @@ public static Filter getMonoChromeFilter() { // filter.addSubFilter(new ColorOverlaySubFilter(4, 10F, 10F, 10F)); return filter; } + + public static Filter getVioletFilter() + { + Point[] greenKnots; + greenKnots = new Point[8]; + greenKnots[0] = new Point(0, 0); + greenKnots[1] = new Point(86, 34); + greenKnots[2] = new Point(117, 41); + greenKnots[3] = new Point(146, 80); + greenKnots[4] = new Point(170, 151); + greenKnots[5] = new Point(200, 214); + greenKnots[6] = new Point(225, 242); + greenKnots[7] = new Point(255, 255); + Filter filter = new Filter(); + filter.addSubFilter(new SaturationSubFilter((float) -1)); + filter.addSubFilter(new ColorOverlaySubFilter(80,(float) 0.1,0,(float) 0.9)); + filter.addSubFilter(new BrightnessSubFilter(-30)); + filter.addSubFilter(new ToneCurveSubFilter(null,null , greenKnots, null)); + return filter; + } } From f9dbf77666c413e795815ba1f54e82f28e9d59da Mon Sep 17 00:00:00 2001 From: Zahra Fazel Date: Thu, 25 Jun 2020 14:44:04 +0430 Subject: [PATCH 3/7] add Save Method --- .../com/example/filters/MainActivity.java | 20 ++++++++ .../src/main/res/drawable/import_photo.png | Bin 0 -> 3244 bytes example/src/main/res/drawable/rotate_left.png | Bin 0 -> 3447 bytes .../src/main/res/drawable/rotate_right.png | Bin 0 -> 3444 bytes example/src/main/res/drawable/save_photo.png | Bin 0 -> 3245 bytes example/src/main/res/layout/activity_main.xml | 46 ++++++++++++++++++ 6 files changed, 66 insertions(+) create mode 100644 example/src/main/res/drawable/import_photo.png create mode 100644 example/src/main/res/drawable/rotate_left.png create mode 100644 example/src/main/res/drawable/rotate_right.png create mode 100644 example/src/main/res/drawable/save_photo.png diff --git a/example/src/main/java/com/example/filters/MainActivity.java b/example/src/main/java/com/example/filters/MainActivity.java index df83db6..ebbcbd7 100644 --- a/example/src/main/java/com/example/filters/MainActivity.java +++ b/example/src/main/java/com/example/filters/MainActivity.java @@ -4,16 +4,21 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Handler; +import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.view.View; import android.widget.ImageView; +import android.widget.Toast; import com.zomato.photofilters.SampleFilters; import com.zomato.photofilters.imageprocessors.Filter; +import java.util.Calendar; import java.util.List; public class MainActivity extends AppCompatActivity implements ThumbnailCallback { @@ -38,6 +43,21 @@ private void initUIWidgets() { placeHolderImageView = (ImageView) findViewById(R.id.place_holder_imageview); placeHolderImageView.setImageBitmap(Bitmap.createScaledBitmap(BitmapFactory.decodeResource(this.getApplicationContext().getResources(), R.drawable.photo), 640, 640, false)); initHorizontalList(); + ImageView import_photo = (ImageView) findViewById(R.id.import_photo); + ImageView rotate_left = (ImageView) findViewById(R.id.rotate_left); + ImageView rotate_right = (ImageView) findViewById(R.id.rotate_right); + ImageView save_photo = (ImageView) findViewById(R.id.save_photo); + assert save_photo != null; + save_photo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Calendar calendar = Calendar.getInstance(); + Bitmap filteredBitmap = ((BitmapDrawable) placeHolderImageView.getDrawable()).getBitmap(); + MediaStore.Images.Media.insertImage(getContentResolver(), filteredBitmap, + "photo_" + calendar.getTimeInMillis(), ""); + Toast.makeText(MainActivity.this, "saved in Pictures", Toast.LENGTH_SHORT).show(); + } + }); } private void initHorizontalList() { diff --git a/example/src/main/res/drawable/import_photo.png b/example/src/main/res/drawable/import_photo.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3bbfe821249f73341ea7f997460a0178a8b2b0 GIT binary patch literal 3244 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 Z{|DxmVr-kcMc4oU002ovPDHLkV1kW1Tc7{{ literal 0 HcmV?d00001 diff --git a/example/src/main/res/drawable/rotate_right.png b/example/src/main/res/drawable/rotate_right.png new file mode 100644 index 0000000000000000000000000000000000000000..45f3392f34ba08c31c71513747f1bc5d5c5567e0 GIT binary patch literal 3444 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 W*+B2q!b2SZ0000kx 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 literal 0 HcmV?d00001 diff --git a/example/src/main/res/layout/activity_main.xml b/example/src/main/res/layout/activity_main.xml index 28c43a1..58ca4e9 100644 --- a/example/src/main/res/layout/activity_main.xml +++ b/example/src/main/res/layout/activity_main.xml @@ -17,6 +17,7 @@ /> + + + + + + + + + From d9c15bc9f0a6b5d45c648f09139609fa5cdb35cb Mon Sep 17 00:00:00 2001 From: Zahra Fazel Date: Fri, 26 Jun 2020 10:59:15 +0430 Subject: [PATCH 4/7] add Import Photo Method can import from both camera and gallery --- example/src/main/AndroidManifest.xml | 6 +- .../com/example/filters/MainActivity.java | 117 ++++++++++++++++-- 2 files changed, 112 insertions(+), 11 deletions(-) diff --git a/example/src/main/AndroidManifest.xml b/example/src/main/AndroidManifest.xml index 2e8df57..409c65b 100644 --- a/example/src/main/AndroidManifest.xml +++ b/example/src/main/AndroidManifest.xml @@ -1,7 +1,11 @@ - + + + + + Date: Fri, 26 Jun 2020 11:26:00 +0430 Subject: [PATCH 5/7] fix some bugs --- example/src/main/AndroidManifest.xml | 2 -- example/src/main/java/com/example/filters/MainActivity.java | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/example/src/main/AndroidManifest.xml b/example/src/main/AndroidManifest.xml index 409c65b..4075b9d 100644 --- a/example/src/main/AndroidManifest.xml +++ b/example/src/main/AndroidManifest.xml @@ -1,9 +1,7 @@ - - Date: Fri, 26 Jun 2020 13:18:56 +0430 Subject: [PATCH 6/7] add rotation --- .../com/example/filters/MainActivity.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/example/src/main/java/com/example/filters/MainActivity.java b/example/src/main/java/com/example/filters/MainActivity.java index a91ea64..66beb73 100644 --- a/example/src/main/java/com/example/filters/MainActivity.java +++ b/example/src/main/java/com/example/filters/MainActivity.java @@ -71,6 +71,34 @@ public void onClick(View v) { import_photo(); } }); + + assert rotate_right != null; + rotate_right.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + Matrix matrix = new Matrix(); + matrix.postRotate(90); + Bitmap scaledBitmap = Bitmap.createScaledBitmap(filteredBitmap, filteredBitmap.getWidth(), filteredBitmap.getHeight(), true); + filteredBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); + placeHolderImageView.setImageBitmap(filteredBitmap); + } + }); + + assert rotate_left != null; + rotate_left.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + Matrix matrix = new Matrix(); + matrix.postRotate(-90); + Bitmap scaledBitmap = Bitmap.createScaledBitmap(filteredBitmap, filteredBitmap.getWidth(), filteredBitmap.getHeight(), true); + filteredBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); + placeHolderImageView.setImageBitmap(filteredBitmap); + } + }); } private void initHorizontalList() { From c2bd6f8e8906c5e687b342af2609cfcb8b29072b Mon Sep 17 00:00:00 2001 From: Zahra Fazel Date: Fri, 26 Jun 2020 13:37:34 +0430 Subject: [PATCH 7/7] fix a bug in rotation --- example/src/main/java/com/example/filters/MainActivity.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/example/src/main/java/com/example/filters/MainActivity.java b/example/src/main/java/com/example/filters/MainActivity.java index 66beb73..865e26c 100644 --- a/example/src/main/java/com/example/filters/MainActivity.java +++ b/example/src/main/java/com/example/filters/MainActivity.java @@ -9,6 +9,7 @@ import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; +import android.graphics.Matrix; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; @@ -82,6 +83,8 @@ public void onClick(View v) matrix.postRotate(90); Bitmap scaledBitmap = Bitmap.createScaledBitmap(filteredBitmap, filteredBitmap.getWidth(), filteredBitmap.getHeight(), true); filteredBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); + scaledBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true); + bitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); placeHolderImageView.setImageBitmap(filteredBitmap); } }); @@ -96,6 +99,8 @@ public void onClick(View v) matrix.postRotate(-90); Bitmap scaledBitmap = Bitmap.createScaledBitmap(filteredBitmap, filteredBitmap.getWidth(), filteredBitmap.getHeight(), true); filteredBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); + scaledBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true); + bitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); placeHolderImageView.setImageBitmap(filteredBitmap); } });