Search code examples
javamatlabqr-codezxingexternal-dependencies

Undefined function or variable 'BufferedImageLuminanceSource'


I recently used decode_qr from this FEX submission to decode my QR code. It ran quite well one or two weeks ago, but today it generate an error for me:

Undefined function or variable 'BufferedImageLuminanceSource'
Error in decode_qr (line 34);
source = BufferedImageLuminanceSource(jig);

I just checked the zxing repository and found that some files were updated several days ago. So I guess the path of some imported file from the package has been changed.

Here is the importing code from the decode_qr function:

import com.google.zxing.qrcode.*;
import com.google.zxing.client.j2se.*;
import com.google.zxing.*;
import com.google.zxing.common.*;
import com.google.zxing.Result.*;

How can I get it to work again? Do I need to change the import paths?


Solution

  • Here's what I did to get it to work (Win 10 x64, R2017b, ZXing 3.3.1):

    1. Downloaded the latest prebuilt .jar artifacts from Sonatype:

    2. Added the files to my dynamic java classpath using javaaddpath:

      javaaddpath('G:\core-3.3.1.jar');
      javaaddpath('G:\javase-3.3.1.jar');
      % Verify using: javaclasspath('-dynamic');
      

      Note:

      To add folders to the static path, which MATLAB loads at startup, create a javaclasspath.txt file, as described in Static Path.

    3. Generated some example QR code using unitag.io: Sample QR

    4. Tried to decode it using Lior Shapira's decode_qr:

      >> out = decode_qr(qr)
      out =
      
          'https://stackoverflow.com/users/3372061/dev-il'
      

    Full code:

    function out = q47223578()
    
    javaaddpath('G:\core-3.3.1.jar');
    javaaddpath('G:\javase-3.3.1.jar');
    % Verify using: javaclasspath('-dynamic');
    
    qr = imread('https://i.sstatic.net/mA4eP.png');
    
    out = decode_qr(qr);