From fbb5d02dd6a6b5412c4ea18df182d56505b617ce Mon Sep 17 00:00:00 2001 From: "srowen@gmail.com" Date: Tue, 19 Feb 2013 11:00:45 +0000 Subject: [PATCH] Issue 1604 Add LuminanceSource.invert() method git-svn-id: https://zxing.googlecode.com/svn/trunk@2574 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../google/zxing/InvertedLuminanceSource.java | 55 +++++++++++++++++++ .../src/com/google/zxing/LuminanceSource.java | 8 +++ 2 files changed, 63 insertions(+) create mode 100644 core/src/com/google/zxing/InvertedLuminanceSource.java diff --git a/core/src/com/google/zxing/InvertedLuminanceSource.java b/core/src/com/google/zxing/InvertedLuminanceSource.java new file mode 100644 index 000000000..fa149ef5b --- /dev/null +++ b/core/src/com/google/zxing/InvertedLuminanceSource.java @@ -0,0 +1,55 @@ +/* + * Copyright 2013 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.zxing; + +/** + * A wrapper implementation of {@link LuminanceSource} which inverts the luminances it returns -- black becomes + * white and vice versa, and each value becomes (255-value). + * + * @author Sean Owen + */ +public final class InvertedLuminanceSource extends LuminanceSource { + + private final LuminanceSource delegate; + + public InvertedLuminanceSource(LuminanceSource delegate) { + super(delegate.getWidth(), delegate.getHeight()); + this.delegate = delegate; + } + + @Override + public byte[] getRow(int y, byte[] row) { + row = delegate.getRow(y, row); + int width = getWidth(); + for (int i = 0; i < width; i++) { + row[i] = (byte) (255 - (row[i] & 0xFF)); + } + return row; + } + + @Override + public byte[] getMatrix() { + byte[] matrix = delegate.getMatrix(); + int length = getWidth() * getHeight(); + byte[] invertedMatrix = new byte[length]; + for (int i = 0; i < length; i++) { + invertedMatrix[i] = (byte) (255 - (matrix[i] & 0xFF)); + } + return invertedMatrix; + } + +} diff --git a/core/src/com/google/zxing/LuminanceSource.java b/core/src/com/google/zxing/LuminanceSource.java index 0e5525a48..46098000f 100644 --- a/core/src/com/google/zxing/LuminanceSource.java +++ b/core/src/com/google/zxing/LuminanceSource.java @@ -101,6 +101,14 @@ public abstract class LuminanceSource { return false; } + /** + * @return a wrapper of this {@code LuminanceSource} which inverts the luminances it returns -- black becomes + * white and vice versa, and each value becomes (255-value). + */ + public final LuminanceSource invert() { + return new InvertedLuminanceSource(this); + } + /** * Returns a new object with rotated image data by 90 degrees counterclockwise. * Only callable if {@link #isRotateSupported()} is true.