26
26
#include <string.h>
27
27
#include <sys/types.h>
28
28
#include <sys/stat.h>
30
29
#include "SarReader.h"
33
31
extern int scale_ratio_upper;
34
32
extern int scale_ratio_lower;
36
extern size_t rescaleJPEG( unsigned char *original_buffer, size_t length, unsigned char **rescaled_buffer );
37
extern size_t rescaleBMP( unsigned char *original_buffer, size_t length, unsigned char **rescaled_buffer );
34
extern size_t rescaleJPEG( unsigned char *original_buffer, size_t length, unsigned char **rescaled_buffer,
36
extern size_t rescaleBMP( unsigned char *original_buffer, unsigned char **rescaled_buffer,
37
bool output_jpeg_flag, int quality );
45
fprintf(stderr, "Usage: sarconv [-j] [-q quality] src_width dst_width src_archive_file dst_archive_file\n");
46
fprintf(stderr, " quality ... 0 to 100\n");
47
fprintf(stderr, " src_width ... 640 or 800\n");
48
fprintf(stderr, " dst_width ... 176, 220, 320, 360, 384, 640, etc.\n");
43
52
int main( int argc, char **argv )
46
55
unsigned long length, offset = 0, buffer_length = 0;
47
56
unsigned char *buffer = NULL, *rescaled_buffer = NULL;
48
57
unsigned int i, count;
58
bool bmp2jpeg_flag = false;
52
int s = atoi( argv[1] );
53
if ( s == 640 ){ scale_ratio_upper = 1; scale_ratio_lower = 2; }
54
else if ( s == 800 ){ scale_ratio_upper = 2; scale_ratio_lower = 5; }
58
fprintf( stderr, "Usage: sarconv 640 arc_file rescaled_arc_file\n");
59
fprintf( stderr, "Usage: sarconv 800 arc_file rescaled_arc_file\n");
62
argc--; // skip command name
65
if ( !strcmp( argv[0], "-j" ) ) bmp2jpeg_flag = true;
66
else if ( !strcmp( argv[0], "-q" ) ){
69
quality = atoi(argv[0]);
74
if (argc != 4) help();
76
scale_ratio_lower = atoi(argv[0]); // src width
77
if (scale_ratio_lower!=640 && scale_ratio_lower!=800) help();
79
scale_ratio_upper = atoi(argv[1]); // dst width
63
81
if ( (fp = fopen( argv[3], "wb" ) ) == NULL ){
64
82
fprintf( stderr, "can't open file %s for writing.\n", argv[3] );
90
108
fprintf( stderr, "file %s can't be retrieved %ld\n", sFI.name, length );
93
sFI.length = rescaleJPEG( buffer, length, &rescaled_buffer );
111
sFI.length = rescaleJPEG( buffer, length, &rescaled_buffer, quality );
94
112
cSR.putFile( fp, i, sFI.offset, sFI.length, sFI.length, true, rescaled_buffer );
96
114
else if ( strlen( sFI.name ) > 3 && !strcmp( sFI.name + strlen( sFI.name ) - 3, "BMP") ){
98
116
fprintf( stderr, "file %s can't be retrieved %ld\n", sFI.name, length );
101
sFI.length = rescaleBMP( buffer, length, &rescaled_buffer );
119
sFI.length = rescaleBMP( buffer, &rescaled_buffer, bmp2jpeg_flag, quality );
102
120
cSR.putFile( fp, i, sFI.offset, sFI.length, sFI.length, true, rescaled_buffer );