1package com.android.rs.refocus.image; 2 3import com.android.rs.refocus.DepthTransform; 4 5/** 6 * An implementation of {@code DepthTransform} that uses an inverse 7 * 8-bit representation of depth similar to the OpenGL z-buffer storage. 8 * 9 * @author chernand@google.com (Carlos Hernandez) 10 */ 11public class RangeInverseDepthTransform implements DepthTransform { 12 public static final String FORMAT = "RangeInverse"; 13 14 private final float near; 15 private final float far; 16 17 public RangeInverseDepthTransform(float near, float far) { 18 this.near = near; 19 this.far = far; 20 } 21 22 @Override 23 public float getNear() { 24 return near; 25 } 26 27 @Override 28 public float getFar() { 29 return far; 30 } 31 32 @Override 33 public String getFormat() { 34 return FORMAT; 35 } 36 37 @Override 38 public int quantize(float value) { 39 return Math.max(0, Math.min(255, 40 (int) ((far - near * far / value) / (far - near) * 255f))); 41 } 42 43 @Override 44 public float reconstruct(int value) { 45 return (far * near) / (far - (far - near) * 46 Math.max(0, Math.min(255, value)) / 255f); 47 } 48} 49