Skip to content
Snippets Groups Projects
Commit 2adcefdd authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Used the try with resource block.

parent bce9e5af
No related branches found
No related tags found
No related merge requests found
......@@ -41,12 +41,8 @@ public class DataCompressor {
case Compress: {
ImageCompressor compressor = new ImageCompressor(parsedCliOptions);
try {
compressor.compress();
} catch (Exception e) {
if (!compressor.compress()) {
System.err.println("Errors occurred during compression.");
System.err.println(e.getMessage());
e.printStackTrace();
}
return;
}
......
......@@ -430,6 +430,11 @@ public class ParsedCliOptions {
return sb.toString();
}
/**
* Get number of planes to be compressed.
*
* @return Number of planes for compression.
*/
public int getNumberOfPlanes() {
if (hasPlaneIndexSet()) {
return 1;
......
package azgracompress.compression;
import java.io.DataOutputStream;
public interface IImageCompressor {
// TODO(Moravec): Replace default Exception with better Exception type.
void compress(DataOutputStream compressStream) throws Exception;
}
......@@ -3,9 +3,7 @@ package azgracompress.compression;
import azgracompress.cli.ParsedCliOptions;
import azgracompress.fileformat.QCMPFileHeader;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.*;
public class ImageCompressor extends CompressorDecompressorBase {
......@@ -16,44 +14,57 @@ public class ImageCompressor extends CompressorDecompressorBase {
codebookSize = (int) Math.pow(2, options.getBitsPerPixel());
}
public void compress() throws Exception {
Log(String.format("Compression with BPP = %d", options.getBitsPerPixel()));
FileOutputStream fos = new FileOutputStream(options.getOutputFile(), false);
DataOutputStream compressStream = new DataOutputStream(new BufferedOutputStream(fos, 8192));
// Create and write header to output stream.
final QCMPFileHeader header = createHeader();
header.writeHeader(compressStream);
boolean compressionResult = true;
/**
* Create compressor based on set options.
*
* @return Correct implementation of image compressor or null if configuration is not valid.
*/
private IImageCompressor getImageCompressor() {
switch (options.getQuantizationType()) {
case Scalar: {
SQImageCompressor compressor = new SQImageCompressor(options);
compressor.compress(compressStream);
return new SQImageCompressor(options);
}
break;
case Vector1D:
case Vector2D: {
VQImageCompressor compressor = new VQImageCompressor(options);
compressor.compress(compressStream);
return new VQImageCompressor(options);
}
break;
case Vector3D:
case Invalid:
throw new Exception("Not supported quantization type");
default:
return null;
}
}
public boolean compress() {
IImageCompressor imageCompressor = getImageCompressor();
if (imageCompressor == null) {
return false;
}
compressStream.flush();
fos.flush();
try (FileOutputStream fos = new FileOutputStream(options.getOutputFile(), false);
DataOutputStream compressStream = new DataOutputStream(new BufferedOutputStream(fos, 8192))) {
final QCMPFileHeader header = createHeader();
header.writeHeader(compressStream);
imageCompressor.compress(compressStream);
} catch (Exception ex) {
System.err.println(ex.getMessage());
return false;
compressStream.close();
fos.close();
}
return true;
}
/**
* Create QCMPFile header for compressed file.
*
* @return Valid QCMPFile header for compressed file.
*/
private QCMPFileHeader createHeader() {
QCMPFileHeader header = new QCMPFileHeader();
......@@ -65,15 +76,8 @@ public class ImageCompressor extends CompressorDecompressorBase {
header.setImageSizeY(options.getImageDimension().getY());
header.setImageSizeZ(options.getNumberOfPlanes());
// If plane index is set then, we are compressing only one plane.
if (options.hasPlaneIndexSet()) {
header.setImageSizeZ(1);
}
header.setVectorDimension(options.getVectorDimension());
return header;
}
}
......@@ -11,7 +11,7 @@ import azgracompress.quantization.scalar.ScalarQuantizer;
import java.io.DataOutputStream;
import java.io.IOException;
public class SQImageCompressor extends CompressorDecompressorBase {
public class SQImageCompressor extends CompressorDecompressorBase implements IImageCompressor {
public SQImageCompressor(ParsedCliOptions options) {
super(options);
......
......@@ -14,7 +14,7 @@ import azgracompress.quantization.vector.VectorQuantizer;
import java.io.DataOutputStream;
import java.io.IOException;
public class VQImageCompressor extends CompressorDecompressorBase {
public class VQImageCompressor extends CompressorDecompressorBase implements IImageCompressor {
public VQImageCompressor(ParsedCliOptions options) {
super(options);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment