📄 disptest.c
字号:
*
* If hist equalization was
* performed then show the
* new_hist. If it wasn't
* done then show the original
* histogram.
*
****************************/
if(show_hist == 1){
if(monitor_type[0] == 'V')
y_offset = 470;
if(monitor_type[0] == 'E')
y_offset = 310;
x_offset = 380;
if(color_transform[0] == 'H')
display_histogram(new_hist, x_offset,
y_offset, 5, 9);
else{
display_histogram(histogram, x_offset,
y_offset, 5, 9);
/* xtra stuff for cips9
display_histogram(histogram, 45,
370, 5, 9); */
/*********************************
*
* Change to show smoothed
* histogram next to the regular
* histogram.
*
**********************************/
/* xtra stuff for cips9
smooth_histogram(histogram);
display_histogram(histogram, 345,
370, 5, 9); */
}
}
gets(response);
printf("\nEnter 0 to quit 1 to do again");
get_integer(¬_finished);
/* set display back to text mode */
my_clear_text_screen();
} /* ends while not_finished */
} /* ends main */
/***********************************************
*
* display_menu_for_display_image(
*
************************************************/
display_menu_for_display_image(image_colors,
display_colors,
invert, color_transform,
monitor_type,
show_hist)
char color_transform[], monitor_type[];
int *invert, *image_colors,
*display_colors, *show_hist;
{
char response[80];
int int_response, not_finished, r;
not_finished = 1;
while(not_finished){
printf("\n\nDISPLAY> Enter choice "
"(0 for no change) ");
printf("\nDISPLAY> 1. Invert is %d (1=on 0=off)",
*invert);
printf("\nDISPLAY> 2. Color Transform-- %s",
color_transform);
printf("\nDISPLAY> 3. Input image has %d colors",
*image_colors);
printf("\nDISPLAY> 4. Display will show %d colors",
*display_colors);
printf("\nDISPLAY> 5. Monitor type is %s",
monitor_type);
printf("\nDISPLAY> 6. Histogram is %d",
*show_hist);
printf(" (1=show 0=don't show)");
printf("\nDISPLAY> _\b");
get_integer(&r);
if(r == 0){
not_finished = 0;
}
if(r == 1){
printf("\nDISPLAY> Enter 1 for invert on");
printf(" 0 for invert off");
printf("\nDISPLAY> ___");
get_integer(&int_response);
*invert = int_response;
} /* ends if r == 1 */
if(r == 2){
printf("\nDISPLAY> Enter the new color "
"transform mode ");
printf("\nDISPLAY> (S) Straight mode");
printf(" (H) Histogram Equalization");
printf("\nDISPLAY> _\b");
gets(response);
if((response[0] == 'S') ||
(response[0] == 's'))
strcpy(color_transform,
"Straight mode");
else
strcpy(color_transform,
"Histogram Equalization mode");
} /* ends if r == 2 */
if(r == 3){
printf("\nDISPLAY> Enter the number "
"of colors");
printf(" in the input image");
printf("\nDISPLAY> ___");
get_integer(&int_response);
*image_colors = int_response;
} /* ends if r == 3 */
if(r == 4){
printf(
"\nDISPLAY> Enter the number of colors "
"for the display");
printf("\nDISPLAY> ___");
get_integer(&int_response);
*display_colors = int_response;
} /* ends if r == 4 */
if(r == 5){
printf("\nDISPLAY> Enter the new monitor type");
printf("\nDISPLAY> (E) EGA (V) VGA");
printf(" (C) CGA (M) Monochrome");
printf("\nDISPLAY> _\b");
gets(response);
if((response[0] == 'E') ||
(response[0] == 'e'))
strcpy(monitor_type, "EGA");
if((response[0] == 'V') ||
(response[0] == 'v'))
strcpy(monitor_type, "VGA");
if((response[0] == 'C') ||
(response[0] == 'c'))
strcpy(monitor_type, "CGA");
if((response[0] == 'M') ||
(response[0] == 'm'))
strcpy(monitor_type, "Monochrome");
} /* ends if r == 5 */
if(r == 6){
printf(
"\nDISPLAY> Enter 1 for show histogram "
"0 for don't");
printf("\nDISPLAY> ___");
get_integer(&int_response);
*show_hist = int_response;
} /* ends if r == 6 */
} /* ends while not_finished */
} /* ends display_menu */
/********************************
*
* display_image_portion(...
*
*********************************/
display_image_portion(image, x, y, display_colors,
image_colors, invert)
int invert, display_colors, image_colors;
short image[ROWS][COLS];
unsigned int x, y;
{
unsigned int color, i, j;
if(invert == 1){
for(i=0; i<ROWS; i++)
for(j=0; j<COLS; j++)
image[i][j] = (display_colors-1)
- image[i][j];
} /* ends if invert == 1 */
for(i=0; i<ROWS; i++){
for(j=0; j<COLS; j++){
/* MSC 6.0 */
my_setcolor(image[i][j]);
my_setpixel(j+x, i+y);
/*****
my_set_pixel(j+x, i+y, image[i][j]);
******/
} /* ends loop over j */
} /* ends loop over i */
} /* ends display_image_portion */
/**********************************************
*
* map_16_shades_of_gray(...
*
* This function maps 16 shades of gray into
* the first 16 color indices. This allows
* you to display a true "black and white"
* image on a color monitor.
*
*********************************************/
map_16_shades_of_gray(display_mode)
int display_mode;
{
/* all MSC 6.0 statements */
my_setvideomode(display_mode);
my_remappalette(0, 0x000000L);
my_remappalette(1, 0x040404L);
my_remappalette(2, 0x080808L);
my_remappalette(3, 0x0c0c0cL);
my_remappalette(4, 0x101010L);
my_remappalette(5, 0x141414L);
my_remappalette(6, 0x181818L);
my_remappalette(7, 0x1c1c1cL);
my_remappalette(8, 0x202020L);
my_remappalette(9, 0x242424L);
my_remappalette(10, 0x282828L);
my_remappalette(11, 0x2c2c2cL);
my_remappalette(12, 0x303030L);
my_remappalette(13, 0x343434L);
my_remappalette(14, 0x383838L);
my_remappalette(15, 0x3f3f3fL);
}
/*********************************************
*
* transform_the_colors(...
*
* This function transforms the gray shades
* in the image array for display. It can either
* do it in straight mode by multiplying or
* dividing or it can do it with hist
* equalization by calling the function
* perform_histogram_equalization.
*
*************************************************/
transform_the_colors(image, color_transform,
display_colors, image_colors,
histogram, horizontal,
vertical)
char color_transform[];
int display_colors, horizontal,
image_colors, vertical;
short image[ROWS][COLS];
unsigned long histogram[];
{
int color, i, j;
float new_grays, area;
unsigned long x;
if(color_transform[0] == 'S'){
for(i=0; i<ROWS; i++){
for(j=0; j<COLS; j++){
if( (display_colors == 16) &&
(image_colors == 256))
color = image[i][j]/16;
if( (display_colors == 16) &&
(image_colors == 16))
color = image[i][j];
if( (display_colors == 256) &&
(image_colors == 256))
color = image[i][j];
if( (display_colors == 256) &&
(image_colors == 16))
color = image[i][j]*16;
image[i][j] = color;
} /* ends loop over j */
} /* ends loop over i */
} /* ends if transform is straight */
if(color_transform[0] == 'H'){
area = ((long)(vertical)) *
((long)(horizontal));
area = area*10000.0;
new_grays = display_colors;
perform_histogram_equalization(image, histogram,
new_grays, area);
} /* ends if transform is hist equalization */
} /* ends transform_the_colors */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -