Android Question How to do HDR image processing?

Discussion in 'Android Questions' started by Inman, Jun 23, 2018.

  1. Inman

    Inman Well-Known Member Licensed User

    [​IMG]

    HDR or High Dynamic Range, as its name implies, is a method that aims to add more "dynamic range" to photographs, where dynamic range is the ratio of light to dark in a photograph. Instead of just taking one photo, HDR uses three photos, taken at different exposures and combines them. You can read more about HDR here.

    https://lifehacker.com/5991508/what-is-hdr-and-when-should-i-use-it-in-my-photos

    I was wondering how we can do HDR processing to a photo. To be clear, I don't want to take a photo within my app using HDR mode. I want to apply HDR effect to an existing photo.

    I found a couple of image processing libraries that have HDR included in them.

    https://android-arsenal.com/details/1/298
    https://github.com/alhazmy13/ImageFilters

    Also a stackoverflow post that tries to explain the logic behind HDR algorithm.

    https://stackoverflow.com/questions/11115278/how-does-hdr-worked-how-to-make-hdr-effect

    Hopefully someone will be able to come with a solution for B4A.
     
  2. Johan Schoeman

    Johan Schoeman Expert Licensed User

    Here you go....have only wrapped the HDRFilter of https://github.com/alhazmy13/ImageFilters. Can add the others if required.

    Copy the attached jar and xml to your additional libs folder.

    Sample Code:
    Code:
    #Region  Project Attributes
        
    #ApplicationLabel: b4aImageFilters
        
    #VersionCode: 1
        
    #VersionName:
        
    'SupportedOrientations possible values: unspecified, landscape or portrait.
        #SupportedOrientations: unspecified
        
    #CanInstallToExternalStorage: False
    #End Region


    #Region  Activity Attributes
        
    #FullScreen: False
        
    #IncludeTitle: True
    #End Region

    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.

        
    Private iv1 As ImageView
        
    Private iv2 As ImageView
        
    Private bm As Bitmap
        
        
    Private imfil As ImageFilters
        
    End Sub

    Sub Activity_Create(FirstTime As Boolean)
        
    'Do not forget to load the layout file created with the visual designer. For example:
        Activity.LoadLayout("main")
        
        bm.Initialize(
    File.DirAssets, "original.jpg")
        iv1.Bitmap = bm
        
        iv2.Bitmap = imfil.applyHDRFilter(bm)
        
    End Sub

    Sub Activity_Resume

    End Sub

    Sub Activity_Pause (UserClosed As Boolean)

    End Sub



    1.png
     

    Attached Files:

    inakigarm, Inman, Erel and 6 others like this.
  3. Johan Schoeman

    Johan Schoeman Expert Licensed User

    This is version 1.01
    Copy the jar and xml to your additional libs folder (have only wrapped the filters that don't require additional parameters to be passed - you can do the rest of them. Use the attached Java code to add the filters where additional params other than the Bitmap have to be passed).

    2.png

    Sample Code (9 different filters):
    Code:
    #Region  Project Attributes
        
    #ApplicationLabel: b4aImageFilters
        
    #VersionCode: 1
        
    #VersionName:
        
    'SupportedOrientations possible values: unspecified, landscape or portrait.
        #SupportedOrientations: unspecified
        
    #CanInstallToExternalStorage: False
    #End Region


    #Region  Activity Attributes
        
    #FullScreen: False
        
    #IncludeTitle: True
    #End Region

    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.

        
    Private iv1, iv2, iv3, iv4, iv5, iv6, iv7, iv8, iv9, iv10 As ImageView
        
        
    Private bm As Bitmap
        
        
    Private imfil As ImageFilters
        

    End Sub

    Sub Activity_Create(FirstTime As Boolean)
        
    'Do not forget to load the layout file created with the visual designer. For example:
        Activity.LoadLayout("main")
        
        bm.Initialize(
    File.DirAssets, "original.jpg")
        iv1.Gravity = 
    Gravity.FILL
        iv1.Bitmap = bm
        
        iv2.Gravity = 
    Gravity.FILL
        iv2.Bitmap = imfil.applyHDRFilter(bm)
        
        iv3.Gravity = 
    Gravity.FILL
        iv3.Bitmap = imfil.applyTvFilter(bm)
        
        iv4.Gravity = 
    Gravity.FILL
        iv4.Bitmap = imfil.applyBlockFilter(bm)
        
        iv5.Gravity = 
    Gravity.FILL
        iv5.Bitmap = imfil.applyGothamFilter(bm)
        
        iv6.Gravity = 
    Gravity.FILL
        iv6.Bitmap = imfil.applyInvertFilter(bm)
        
        iv7.Gravity = 
    Gravity.FILL
        iv7.Bitmap = imfil.applyOldFilter(bm)
        
        iv8.Gravity = 
    Gravity.FILL
        iv8.Bitmap = imfil.applyReliefFilter(bm)
        
        iv9.Gravity = 
    Gravity.FILL
        iv9.Bitmap = imfil.applySharpenFilter(bm)
        
        iv10.Gravity = 
    Gravity.FILL
        iv10.Bitmap = imfil.applySketchFilter(bm)
        
    End Sub

    Sub Activity_Resume

    End Sub

    Sub Activity_Pause (UserClosed As Boolean)

    End Sub
     

    Attached Files:

    udg, JordiCP, inakigarm and 1 other person like this.
  4. Inman

    Inman Well-Known Member Licensed User

    Thank you very much for such a fast response. Library works perfectly.
     
    Johan Schoeman likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice