B4A Library RSImageProcessing Library

Hello everybody,

I'm back again with a new library.
With this library you can do a lot of image processing and it is easy to use:


  • Properties:
    • All As
    Methods:
    • applyConfig (config As Double()())
    • computeConvolution3x3 (src As Bitmap, matrix As ConvolutionMatrix) As Bitmap
      This works fluently on my app.
      Sharpens my image.
      Works slower!
      Uses getpixel
      src:
      matrix:
      Return type: @return:
  • RSImageBlend
    Methods:
    • AddBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds addition blend.
    • AverageBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds average blend.
    • Blend (bottomImage As Bitmap, topImage As Bitmap, left As Float, top As Float) As Bitmap
      Blends 2 bitmaps together with help of a canvas. - Blending
      Draws them both to a canvas and saves them as a bitmap.
    • ColorBurnBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • ColorDodgeBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds the color dodge blend mode to it.
    • DarkenBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds darken blend.
    • DifferenceBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • ExclusionBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • GlowBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • HardMixBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • HardlightBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • LightenBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds lighten blend.
    • LinearBurnBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • LinearDodgeBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds addition blend.
    • LinearLightBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • MultiplyBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds darken blend.
    • NegationBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • OverlayBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • PhoenixBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • PinLightBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • ReflectBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • ScreenBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • SoftlightBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • SubstractBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
    • VividLightBlend (source As Bitmap, layer As Bitmap) As Bitmap
      Blends 2 bitmaps to one and adds substraction blend.
  • RSImageEffects
    Methods:
    • Blur (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Does a Gaussian Blur to the image. - Filter
      It uses the concepts of Convolution Filtering to apply in image processing.
    • Brightness (src As Bitmap, value As Int) As Bitmap
      The concept of brightness is rather simple, increasing/decreasing value of each R, G, B channel together.
      + By increasing: image results brighter.
      + By decreasing: image results darker.

      Effects
    • ColorBoost (src As Bitmap, type As Int, percent As Float) As Bitmap
      Color boost technique is basically based on color filtering, which is to increase the
      intensity of a single color channel.

      Effect
    • Contrast (src As Bitmap, value As Double) As Bitmap
      Contrast is the difference in luminance and/or colour that makes an object (or its representation in an image or display) distinguishable.
      In visual perception of the real world, contrast is determined by the difference in the colour and
      brightness of the object and other objects within the same field of view.

      Effects
    • Emboss (src As Bitmap) As Bitmap
      Embosses your bitmap to make it look sketchy like.

      Filter
    • Engrave (src As Bitmap) As Bitmap
      Engraves your bitmap.

      Filter
    • Flip (src As Bitmap) As Bitmap
      Flips a bitmap vertically.

      Effect
    • GammaCorrection (src As Bitmap, red As Double, green As Double, blue As Double) As Bitmap
      Gamma correction or gamma encoding is one among the common image processing method
      Gamma correction, gamma nonlinearity, gamma encoding, or often simply gamma,
      is the name of a nonlinear operation used to code and decode luminance or tristimulus values in video or
      still image systems.

      Effect
    • GreyScale (src As Bitmap) As Bitmap
      Greyscales a bitmap
      The intensity is calculated by common formula: 30% of Red + 59% of Green + 11 % of Blue

      Effects
    • Highlight (src As Bitmap) As Bitmap
      Highlights a bitmap.

      Effects
    • Invert (src As Bitmap) As Bitmap
      Inverts a bitmap.
      Every image pixel holds information of four channels: Alpha, Red, Green, Blue.
      However, Alpha doesn�t reflect the image color as display. So the value is kept, and take inversion for other three
      channels by formula: 0xFF � CurrentValue.
    • Mirror (src As Bitmap) As Bitmap
      Flips a bitmap horizontally.

      Effect
    • Noise (source As Bitmap) As Bitmap
      Gives a noise or flea effect to the bitmap

      Effect
    • Paintify (src As Bitmap, bitOffset As Int, Factor As Int, Offset As Int) As Bitmap
      Makes a paint like effect on a picture.
      128 (or 64/32)
      8
      1

      Effect
    • Paintify2 (src As Bitmap, bitOffset As Int, Factor As Int, Offset As Int) As Bitmap
      Makes a paint like effect on a picture.
      128 (or 64/32)
      8
      1

      Effect
    • Posterize (src As Bitmap, bitOffset As Int) As Bitmap
      Decreasing color depth involves converting to standard values.
      For example: if I want to offset 32, then each image color channel will apply the range: 0, 31, 63 �

      Effects
    • Reflection (originalImage As Bitmap, ReflectionGap As Int) As Bitmap
      Makes a mirror/reflection like
      ReflectionGap: gap space between original and reflected

      Effect
    • ReplaceColor (src As Bitmap, fromColor As Int, targetColor As Int) As Bitmap
      Replaces pixels from one color to the other.

      Effect
    • Rotate (src As Bitmap, degree As Float) As Bitmap
      Rotates a bitmaps

      Effects
    • RoundCorner (src As Bitmap, round As Float) As Bitmap
      Create a bitmap with round corners.
      Effect
    • SepiaToning (src As Bitmap, depth As Int, red As Double, green As Double, blue As Double) As Bitmap
      Sepia-toning effect is used very commonly in photography.
      It is the process of changing the intensity on every pixel color of a gray-scale image, or so-called black-and-white.

      Effects
    • Sharpen (src As Bitmap, weight As Double) As Bitmap
      Sharpening effect make uses of Convolution Matrix
      The applied matrix is:
      [ 0 | -2 | 0 ]
      [ -2 | 11 | -2 ]
      [ 0 | -2 | 0 ]

      Filter
      Weight : 3
    • Sharpen2 (src As Bitmap, weight As Double) As Bitmap
      Sharpening effect make uses of Convolution Matrix
      The applied matrix is:
      [ 0 | -2 | 0 ]
      [ -2 | 11 | -2 ]
      [ 0 | -2 | 0 ]

      Filter
      Weight : 3
    • Sketchify (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Sketchify a photo.
      src:
      Factor: 16
      Offset: 0
      Return type: @return:Effect
    • Smooth (src As Bitmap, value As Double) As Bitmap
      Smoothens a bitmap.
      The factor is 13 and offset 1.

      Filter
    • Snow (source As Bitmap) As Bitmap
      Adds a snow-like effect to the bitmap.
      Opposite of Black Filter
      Sets all pixels having R,G,B values to the max (0xFF) when they�re greater than threshold,
      then we have the Snow Effect.

      Effect
    • TintColor (src As Bitmap, degree As Int) As Bitmap
      Gives a nice tint color to a bitmap.
      degree: Use the constants for the degree.

      Effect
    • Watermark (src As Bitmap, watermark As String, x As Float, y As Float, color As Int, alpha As Int, size As Int, underline As Boolean) As Bitmap
      Gives your image a watermark, choose the location of the text, etc, etc
      Effect
  • RSImageFilters
    Methods:
    • BlackFilter (source As Bitmap) As Bitmap
      Base on randomizing image pixels, another filter is created, named �Black Filter�, or enhance the noise of darkness.
      The algorithm is to generate a threshold number (0-255), if all R,G,B values of a pixel are less than the threshold,
      then set the pixel to black.

      Filter
    • ColorFilter (src As Bitmap, red As Double, green As Double, blue As Double) As Bitmap
      Filter the color on the bitmap, in which to display image by only one channel or
      combine the increase on every channel.

      Filter
    • EdgeEnhancement (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Edge Enhancement
    • EdgeEnhancement2 (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Edge Enhancement
    • EdgeEnhancement3 (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Edge Enhancement
    • FindEdge (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Find Edge
    • FindEdge2 (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Find Edge
    • FindEdge3 (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Find Edge
    • GaussianFilter (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Gaussian filter.
    • GaussianFilter2 (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Gaussian filter.
    • HueFilter (source As Bitmap, level As Int) As Bitmap
      Filters the Hue of a bitmap.
      By converting RGB to HSV, we can adjust pixel color in different way.

      Filter
    • MeanRemoval (src As Bitmap) As Bitmap
      Mean Removal Effect makes uses of Convolution Matrix.
      The applied matrix is:
      [ -1 | -1 | -1 ]
      [ -1 | 9 | -1 ]
      [ -1 | -1 | -1 ]

      Filter
    • SaturationFilter (source As Bitmap, level As Int) As Bitmap
      Filters the saturation of a bitmap.
      By converting RGB to HSV, we can adjust pixel color in different way.

      Filter
    • ShadingFilter (source As Bitmap, shadingColor As Int) As Bitmap
      Shading Filter is a technique that use AND operator for the current pixel color and a desired-shading color.

      Filter
    • Wedding (src As Bitmap, Factor As Int, Offset As Int) As Bitmap
      Wedding
      src:
      Factor: 16
      Offset: 0
      Return type: @return:Filter
  • RSImageProcessing
    Methods:
    • Initialize
      Initializes the RSSImageProcessing Library.
      EventName - Events subs prefix.
    • compress (bitmap As Bitmap, format As String, quality As Int, stream As OutputStream)
      Write a compressed version of the bitmap to the specified outputstream.

      format The format of the compressed image
      quality Hint to the compressor, 0-100. 0 meaning compress for small size, 100 meaning compress for max quality. Some formats, like PNG which is lossless, will ignore the quality setting
      stream The outputstream to write the compressed data.
    • createScaledBitmap (src As Bitmap, dstWidth As Int, dstHeight As Int, filter As Boolean) As Bitmap
      Creates a new bitmap, scaled from an existing bitmap.
      src The source bitmap.
      dstWidth The new bitmap's desired width.
      dstHeight The new bitmap's desired height.
      filter true if the source should be filtered.
      Return type: @return:the bitmap
    • eraseColor (bitmap As Bitmap, c As Int)
      Fills the bitmap's pixels with the specified Color.
      bitmap: the source bitmap. (must be mutable!)
      c: colours
    • extractAlpha (bitmap As Bitmap) As Bitmap
      Returns a new bitmap that captures the alpha values of the original.
      bitmap:
    • extractBitmap (source As Bitmap, x As Int, y As Int, width As Int, height As Int) As Bitmap
      Returns an immutable bitmap from the specified subset of the source bitmap.
      The new bitmap may be the same object as source, or a copy may have been made.
      It is initialized with the same density as the original bitmap.
      source:
      x:
      y:
      width:
      height:
      Return type: @return:
    • extractBitmap2 (source As Bitmap, x As Int, y As Int, width As Int, height As Int) As Bitmap
      Returns an immutable bitmap from the specified subset of the source bitmap.
      The new bitmap may be the same object as source, or a copy may have been made.
      It is initialized with the same density as the original bitmap.
      source:
      x:
      y:
      width:
      height:
      Return type: @return:
    • getDestination (src As Bitmap, destination As Double) As Int
      Gets the new destination width or height keeping the aspect ratio of the image.
      src: - bitmap
      destination: -Source width or height
      Return type: @return:
    • getPixel (bitmap As Bitmap, x As Int, y As Int) As Int
      Returns the Color at the specified location.
      Throws an exception if x or y are out of bounds (negative or >= to the width or height respectively).
      bitmap:
      x: The x coordinate (0...width-1) of the pixel to return
      y: The y coordinate (0...height-1) of the pixel to return
      Return type: @return:The argb Color at the specified coordinate
    • hasAlpha (bitmap As Bitmap) As Boolean
      Returns true if the bitmap's config supports per-pixel alpha, and if the pixels may contain non-opaque alpha values.
      For some configs, this is always false (e.g. RGB_565), since they do not support per-pixel alpha.
      However, for configs that do, the bitmap may be flagged to be known that all of its pixels are opaque.
      In this case hasAlpha() will also return false. If a config such as ARGB_8888 is not so flagged, it will return true by default.
      bitmap:
      Return type: @return:
    • isMutable (bitmap As Bitmap) As Boolean
      Returns true if the bitmap is marked as mutable (i.e. can be drawn into)
      bitmap:
      Return type: @return:
    • isRecycled (bitmap As Bitmap) As Boolean
      Returns true if this bitmap has been recycled. If so, then it is an error to try to access its pixels, and the bitmap will not draw.
      bitmap:
      Return type: @return:true if the bitmap has been recycled
    • recycle (bitmap As Bitmap)
      Free the native object associated with this bitmap, and clear the reference to the pixel data.
      This will not free the pixel data synchronously; it simply allows it to be garbage collected if
      there are no other references. The bitmap is marked as "dead", meaning it will throw an exception if
      getPixels() or setPixels() is called, and will draw nothing. This operation cannot be reversed,
      so it should only be called if you are sure there are no further uses for the bitmap.
      This is an advanced call, and normally need not be called, since the normal GC process will free
      up this memory when there are no more references to this bitmap.
      bitmap:
    • rotate (src As Bitmap, degree As Float) As Bitmap
    • rotateBitmap (bitmap As Bitmap, degrees As Float) As Bitmap
      Rotates the bitmap.
      bitmap:
      degrees:
      Return type: @return:
    • scaleBitmap (bitmap As Bitmap, sx As Float, sy As Float) As Bitmap
      Scales the bitmap.
      bitmap:
      degrees:
      Return type: @return:
    • setHorizontalScrollBarEnabled (hsv As HorizontalScrollView, enabled As Boolean)
    • skewBitmap (bitmap As Bitmap, kx As Float, ky As Float) As Bitmap
      Skews the bitmap.
      bitmap:
      kx:
      ky:
      Return type: @return:
    • translateBitmap (bitmap As Bitmap, dx As Float, dy As Float) As Bitmap
      Translate the bitmap.
      bitmap:
      degrees:
      Return type: @return:
    • writeBitmapToFile (src As Bitmap, dir As String, fileName As String, quality As Int)
      Writes a bitmap to a file

And tons of other features!

Have fun,
Tomas
 

Attachments

  • RSImageProcessing.zip
    151.9 KB · Views: 2,484
  • RSImageProcessing2.zip
    332 KB · Views: 2,910
  • RSImageProcessingFixed.zip
    331.4 KB · Views: 4,005
Last edited:

thedesolatesoul

Expert
Licensed User
Longtime User
The picture I am rotating was taken by the camera, so the actual size is not fully under control.
You could either use the Advanced Camera Lib from Tomas, or you could use Reflection to may be set up the camera resolution.
The reason for rotating is, that the picture taken by the camera in portrait mode, must be rotated before upload in order to display it correctly.
I agree this is a problem. If you do find any solution for this please do post it.
I guess the amount of memory allocated to a process cannot be set by the application, or?
This is set by the OS, so unfortunately no.
 

manios

Active Member
Licensed User
Longtime User
You could either use the Advanced Camera Lib from Tomas, or you could use Reflection to may be set up the camera resolution.


Well setting the resolution is not the main problem, but to what size shall it be set without user intervention? Also this should be done BEFORE the picture is taken. I will try a Try/Catch subroutine to make that automatically.

A second path could be to cut the picture in 2 parts, rotate both parts and put it together again. Anyone have an idea how to do that?
 

vb1992

Well-Known Member
Licensed User
Longtime User
Instagram used 612x612 size and got 20 million users loving it.
Now they offer bigger hi-res sizes.

All depends on what you are trying to achieve.


1936x1936 is now the bigger size they offer
 

mkvidyashankar

Active Member
Licensed User
Longtime User
hi

Yeah, i reduce the image size before processing, it is working fine.
this library is wonderful
n thanks to XverhelstX
 

XverhelstX

Well-Known Member
Licensed User
Longtime User
RSImageProcessing 2!

Library updated heavily to RSImageProcessing 2!

Divided into Filters, Effects and Blending methods.

- 25 blending methods were added (Like photoshop)
- Effects like Paintify, sketchify
- Filters for edge enhancement, gaussian filter, etc
- Improved speed!

And some more methods.

Check out the first post!

tomas
 

mkvidyashankar

Active Member
Licensed User
Longtime User
error in paintify

I tried to use paintify function to bitmap, I am getting the error,

log is here, please chk



java.lang.IllegalArgumentException
at android.view.Surface.unlockCanvasAndPost(Native Method)
at android.view.ViewRoot.draw(ViewRoot.java:1553)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1265)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1867)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
 

JohnC

Expert
Licensed User
Longtime User
What function to use?

If a user takes a picture of a physical paper picture, if the smartphone was not 100% positioned parallel to the paper photo, the image will not be a perfect rectangle - meaning one side of the picture will be shorter (from top to bottom) then the other side.

What image processing function do I need to use to create a more even rectangle image so all corners are 90 degrees?

Thanks for a great lib :)
 

awama

Active Member
Licensed User
Longtime User
Error with new library 2

Hi,

on my Galaxy S2 , ICS 4.0.3 I got following error with the new library while compiling:

Compiling code. Error
Error compiling program.
Error description: Object reference not set to an instance of an object.
Occurred on line: 20
IO.Initialize("IO")
Word: (

Any idea whats the reason? Thanks.
Walter
 

awama

Active Member
Licensed User
Longtime User
I haven't encountered that error before.
Can you post the log? and unfiltered log? and wrap it in quote tags?

Also are you trying out the sample or not?

Tomas


I am trying the code from the first example with the first library and it works ok, then I replace the library with the new library and then it ist not possible to compile.
I will post the log on sunday.

Walter
 

mkvidyashankar

Active Member
Licensed User
Longtime User
java.lang.ArrayIndexOutOfBoundsException error

I am trying to use image RSImageprocessing library to get sketch effect
my code is like this

B4X:
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.

End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
    Dim io As RSImageProcessing
    Dim ii As RSImageEffects
    Dim ifilter As RSImageFilters
    
    
    Dim panel1 As Panel
    Dim button_sketch As Button
    Dim filedire As String
    Dim bitmap1 As Bitmap
    Dim imageview1 As ImageView
    
End Sub

Sub Activity_Create(FirstTime As Boolean)

  Activity.LoadLayout("layout1")
' If File.IsDirectory(File.DirRootExternal,"/Sketchy/") =False Then
'       File.MakeDir(File.DirRootExternal,"/sketchy/")
'  End If
'      filedire=File.DirRootExternal & "/Sketchy/" 
     
     
     panel1.SetLayout(0,0,100%x,100%y)
     button_sketch.SetLayout(50dip,100%y-40dip,100dip,40dip)
     imageview1.SetLayout(5dip,50dip,100%x-10dip,0.70*100%x)
     ' bitmap1.Initialize(File.DirAssets,"IMG_2436.jpg")
     imageview1.Bitmap = LoadBitmapSample(File.DirAssets,"IMG_2436.jpg",600,480)
     io.Initialize
     
     End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub
Sub Button_sketch_Click
    imageview1.Bitmap = ii.Sketchify(LoadBitmapSample(File.DirAssets,"IMG_2436.jpg",600,480),16,0)
   End Sub


I am getting error java.lang.ArrayIndexOutOfBoundsException


** Activity (main) Create, isFirst = true **
RSSketchLibrary has been initialized.
** Activity (main) Resume **
main_button_sketch_click (B4A line: 50)
imageview1.Bitmap = ii.Sketchify(LoadBitmapSample(File.DirAssets,"IMG_2436.jpg",600,480),16,0)
java.lang.ArrayIndexOutOfBoundsException
at com.rootsoft.imageprocessing.ConvolutionMatrix.computeConvolution3x3(ConvolutionMatrix.java:60)
at com.rootsoft.imageprocessing.RSImageEffects.Blur(RSImageEffects.java:87)
at com.rootsoft.imageprocessing.RSImageEffects.Sketchify(RSImageEffects.java:936)
at com.orange.sketch.main._button_sketch_click(main.java:288)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:170)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:158)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:154)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:54)
at android.view.View.performClick(View.java:2538)
at android.view.View$PerformClick.run(View.java:9152)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
java.lang.ArrayIndexOutOfBoundsException
Connected to B4A-Bridge


Where I am erring ?
 

mkvidyashankar

Active Member
Licensed User
Longtime User
Hi

I tried and two steps are successfully done but when it goes to blur method it again gives arrayoutofbounds exception error. i tried for engrave effects also it also gives the same problem. the code was working in the previous library.


Log is here


com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
java.lang.ArrayIndexOutOfBoundsException
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (main) Resume **
Installing file.
** Activity (main) Pause, UserClosed = false **
PackageAdded: package:com.orange.sketch
** Activity (main) Create, isFirst = true **
RSSketchLibrary has been initialized.
** Activity (main) Resume **
main_button_sketch_click (B4A line: 58)
bitmap2=ii.Engrave(bitmap2)
java.lang.ArrayIndexOutOfBoundsException
at com.rootsoft.imageprocessing.ConvolutionMatrix.computeConvolution3x3(ConvolutionMatrix.java:60)
at com.rootsoft.imageprocessing.RSImageEffects.Engrave(RSImageEffects.java:525)
at com.orange.sketch.main._button_sketch_click(main.java:310)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:170)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:158)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:154)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:54)
at android.view.View.performClick(View.java:2538)
at android.view.View$PerformClick.run(View.java:9152)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
java.lang.ArrayIndexOutOfBoundsException
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
 
Last edited:

mkvidyashankar

Active Member
Licensed User
Longtime User
I checked other effects also. it is throwing the same error in these effects

Blur
Emboss
Engrave
paintify
paintify2
posaterize
skecthify
 

XverhelstX

Well-Known Member
Licensed User
Longtime User
I tried to improve the convulationmatrix, which i thought i had fixed, but apparently leaded to the arrayoutofboundexception.

I reuploaded the new Library under RSImageProcessingFixed which have the updated lib files.

Note that ImageProcessing (Sketchify, etc) does quite a lot of time on processing the images cause it uses setpixel instead of setpixels.

Tomas
 

vb1992

Well-Known Member
Licensed User
Longtime User
you might like this effect better

B4X:
Sub Activity_Create(FirstTime As Boolean)

  Activity.LoadLayout("layout1")
' If File.IsDirectory(File.DirRootExternal,"/Sketchy/") =False Then
'       File.MakeDir(File.DirRootExternal,"/sketchy/")
'  End If
'      filedire=File.DirRootExternal & "/Sketchy/" 
     
     
     panel1.SetLayout(0,0,100%x,100%y)
     button_sketch.SetLayout(50dip,100%y-40dip,100dip,40dip)
     imageview1.SetLayout(5dip,50dip,100%x-10dip,0.70*100%x)
      bitmap1.Initialize(File.DirAssets,"IMG_2436.jpg")
     ldratio = bitmap1.Width/bitmap1.Height
     
     imageview1.Bitmap = LoadBitmapSample(File.DirAssets,"IMG_2436.jpg",300,300/ldratio)
     io.Initialize
     
     End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub
Sub Button_sketch_Click
    Dim bitmap2 As Bitmap
   bitmap2.Initialize3(imageview1.Bitmap)
   'bitmap2= ii.GreyScale(bitmap2)
   'bitmap2=ii.Invert(bitmap2)
'   bitmap2=ii.Invert(bitmap2)
bitmap2= ii.Brightness(bitmap2,11)
bitmap2= ii.Contrast(bitmap2,21)
   bitmap2 =ii.Sketchify(bitmap2,16,0)
   
   
    imageview1.bitmap = bitmap2
   End Sub
 
Top