📄 djet.c
字号:
*
* Print the two arrays to make a 100x200 output.
* To do this you loop over 100 rows, set the
* r buffer to the image values, set the
* graphics, and print the row via function
* print_original_200_row.
*
*************************************************/
for(i=0; i<100; i++){
for(j=0; j<100; j++){
r[j] = image1[i][j];
r[j+100] = image2[i][j];
} /* ends loop over j */
end_graphics_mode(printer);
select_300_dpi_resolution(printer);
set_raster_width(printer);
start_raster_graphics(printer);
select_full_graphics_mode(printer);
print_original_200_row(printer, r);
printf("\n\tPrinting row %d", i);
} /* ends loop over i */
/**********************************************
*
* If show_hist is 1 then calculate the
* histogram for the two image arrays and
* print the histogram.
*
***********************************************/
if(show_hist == 1){
if(color_transform[0] == 'S'){
calculate_histogram(image1, histogram);
calculate_histogram(image2, histogram);
print_hist_image(printer, histogram);
}
if(color_transform[0] == 'H'){
print_hist_image(printer, final_hist);
}
}
/*********************************************
*
* Print a couple of blank lines then print
* the caption.
*
**********************************************/
end_graphics_mode(printer);
strcpy(page, " \n");
fputs(page, printer);
fputs(page, printer);
sprintf(page, " %s\n", caption);
fputs(page, printer);
fputc(FORMFEED, printer);
fclose(printer);
printf("\nEnd");
} /* ends print_graphics_image */
/******************************************
*
* get_graphics_caption(...
*
******************************************/
get_graphics_caption(caption)
char caption[];
{
printf("\nEnter the caption to be printed\n---");
gets(caption);
} /* ends get_graphics_caption */
/************************************************
*
* select_full_graphics_mode(...
*
************************************************/
select_full_graphics_mode(printer)
FILE *printer;
{
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('b', printer);
fputc('0', printer);
fputc('M', printer);
}
/************************************************
*
* set_horizontal_offset(...
*
************************************************/
set_horizontal_offset(printer)
FILE *printer;
{
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('b', printer);
fputc('4', printer);
fputc('9', printer);
fputc('6', printer);
fputc('X', printer);
}
/************************************************
*
* set_shorter_horizontal_offset(...
*
************************************************/
set_shorter_horizontal_offset(printer)
FILE *printer;
{
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('b', printer);
fputc('4', printer);
fputc('8', printer);
fputc('0', printer);
fputc('X', printer);
}
/************************************************
*
* end_graphics_mode(...
*
************************************************/
end_graphics_mode(printer)
FILE *printer;
{
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('r', printer);
fputc('B', printer);
}
/************************************************
*
* set_raster_width(...
*
************************************************/
set_raster_width(printer)
FILE *printer;
{
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('r', printer);
fputc('2', printer);
fputc('2', printer);
fputc('0', printer);
fputc('0', printer);
fputc('S', printer);
}
/************************************************
*
* start_raster_graphics(...
*
************************************************/
start_raster_graphics(printer)
FILE *printer;
{
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('r', printer);
fputc('0', printer);
fputc('A', printer);
}
/************************************************
*
* select_300_dpi_resolution(...
*
************************************************/
select_300_dpi_resolution(printer)
FILE *printer;
{
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('t', printer);
fputc('3', printer);
fputc('0', printer);
fputc('0', printer);
fputc('R', printer);
}
/************************************************
*
* print_bytes(...
*
************************************************/
print_bytes(printer, buffer)
FILE *printer;
char buffer[];
{
int i;
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('b', printer);
fputc('2', printer);
fputc('0', printer);
fputc('0', printer);
fputc('W', printer);
for(i=0; i<200; i++){
fputc(buffer[i], printer);
}
} /* ends print_bytes */
/**************************************************
*
* print_original_200_row(...
*
***************************************************/
print_original_200_row(printer, short_row)
FILE *printer;
short short_row[200];
{
char row[8][200];
char c[200], response[80];
int i, j, k;
short value;
for(i=0; i<200; i++){
value = short_row[i];
if(value > 63) value = 63;
if(value < 0) value = 0;
for(j=0; j<8; j++)
row[j][i] = patterns[value][j];
} /* ends loop over i */
for(i=0; i<8; i++){
for(j=0; j<200; j++)
c[j] = row[i][j];
set_horizontal_offset(printer);
print_bytes(printer, c);
} /* ends loop over i */
} /* ends print_original_200_row */
/***********************************
*
* print_hist_image(...
*
************************************/
print_hist_image(printer, hist)
FILE *printer;
unsigned long hist[];
{
char c, d;
int i, j, k;
unsigned long limit, max;
d = 0;
c = 255;
/********************************
*
* First scale the histogram
*
*********************************/
max = 0;
for(i=0; i<256; i++)
if(hist[i] > max) max = hist[i];
if(max > 200){
for(i=0; i<256; i++){
hist[i] = (hist[i]*200)/max;
}
}
/********************************
*
* Second print it
*
* Print a space between the image
* and the histogram.
*
*********************************/
for(i=0; i<20; i++){
end_graphics_mode(printer);
select_300_dpi_resolution(printer);
set_raster_width(printer);
start_raster_graphics(printer);
select_full_graphics_mode(printer);
set_horizontal_offset(printer);
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('b', printer);
fputc('2', printer);
fputc('0', printer);
fputc('0', printer);
fputc('W', printer);
for(j=0; j<200; j++)
fputc(d, printer);
}
printf("\n\nHIST> Now printing the histogram");
for(i=0; i<256; i++){
printf("\n\tHIST> Histogram[%d]=%ld",
i, hist[i]);
/* print the line 2 times */
for(k=0; k<2; k++){
end_graphics_mode(printer);
select_300_dpi_resolution(printer);
set_raster_width(printer);
start_raster_graphics(printer);
select_full_graphics_mode(printer);
/***************************
*
* Print grid marks every
* 50 pixels. Do this by
* setting a shorter margin
* then printing 2 marks then
* the data.
*
****************************/
if( (i == 0) ||
(i == 50) ||
(i == 100) ||
(i == 150) ||
(i == 200) ||
(i == 255)){
set_shorter_horizontal_offset(printer);
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('b', printer);
fputc('2', printer);
fputc('0', printer);
fputc('2', printer);
fputc('W', printer);
fputc(c, printer);
fputc(c, printer);
if(hist[i] >= 200)
hist[i] = 200;
limit = 200 - hist[i];
if(hist[i] == 0)
fputc(c, printer);
for(j=0; j<hist[i]; j++)
fputc(c, printer);
for(j=0; j<limit; j++)
fputc(d, printer);
} /* ends print grid marks */
/***************************
*
* If you do not print
* grid marks, set the normal
* margin and then print the
* data.
*
****************************/
else{
set_horizontal_offset(printer);
/* this prints 200 bytes so print 200 */
fputc(ESCAPE, printer);
fputc('*', printer);
fputc('b', printer);
fputc('2', printer);
fputc('0', printer);
fputc('0', printer);
fputc('W', printer);
if(hist[i] >= 200)
hist[i] = 200;
limit = 200 - hist[i];
if(hist[i] == 0)
fputc(c, printer);
for(j=0; j<hist[i]; j++)
fputc(c, printer);
for(j=0; j<limit; j++)
fputc(d, printer);
} /* ends else no grid marks */
} /* ends loop over k */
} /* ends loop over i */
} /* ends print_hist_image */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -