⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavplot.cpp

📁 wavlet compression on c++ only cods
💻 CPP
字号:
// Copyright (c) 1999 Stephen T. Welstead. All rights reserved.
// File WAVPLOT.CPP  Wavelet Plotting Window

#include <stdio.h>

#include "utm.h"
#include "wavrids.h"
#include "wavplot.h"

twavelet_plot_window_manager *the_wavelet_plot_window_manager;

LRESULT CALLBACK _export WaveletPlotWndProc (HWND hwnd, UINT message,
     WPARAM wParam,LPARAM lParam)
     {
     return
       (LRESULT CALLBACK) (the_wavelet_plot_window_manager->
		handle_message (hwnd, message, wParam, lParam)) ;
     }

twavelet_plot_window_manager::twavelet_plot_window_manager (HINSTANCE hInstance,
     tmdi_frame_window *parent,LPCSTR menu_name,LPCSTR class_name):
    tmdi_manager (hInstance,parent,(LRESULT CALLBACK)WaveletPlotWndProc,
	0,menu_name,"Wavelet Plot Window",class_name,"WAV_ICON"){
    the_wavelet_plot_window_manager = this;
    }

int twavelet_plot_window_manager::respond_wm_create (HWND hwnd) {
    child_window_struct *child;
    hwndClient = GetParent (hwindow) ;
    hwndFrame  = GetParent (hwndClient) ;
    child = new child_window_struct;
    child->hwnd = hwnd;
    child->window = new twavelet_plot_window(hwnd,this,the_title);
    add_child_window (hwnd,child);
    return 1;
    }

twavelet_plot_window::twavelet_plot_window(HWND hwnd,
     tmdi_manager *the_manager,LPCSTR title_name)
     : tmdi_graph_window(hwnd,the_manager,title_name)
{
   Daub4_wavelet = new tDaub4_wavelet();
   Daub6_wavelet = new tDaub6_wavelet();
   Haar_wavelet = new tHaar_wavelet();
   starting_component = 11;
   no_of_components = 1024;  // Must be a power of 2 !
   gr_setup.scale_window_from_data = 1;
   gr_setup.x_min = 0.0;
   gr_setup.x_max = 1.0;
   gr_setup.y_min = -1.0;
   gr_setup.y_max = 1.0;
   gr_setup.label_axes = FALSE;
   gr_setup.label_x_axis = FALSE;
   gr_setup.label_y_axis = FALSE;
   gr_setup.show_x_tic_marks = FALSE;
   gr_setup.show_y_tic_marks = FALSE;
   gr_setup.label_x_tic_marks = FALSE;
   gr_setup.label_y_tic_marks = FALSE;
   gr_setup.back_color = RGB_WHITE;
   gr_setup.text_color = RGB_BLACK;
   gr_setup.line_color = RGB_BLACK;
}

int twavelet_plot_window::set_starting_component () {
    int value = starting_component;
    int maxlen = 5,dec_places = 0,max_val = no_of_components,
	min_val = 1;
    if (numeric_dialog (hwindow,
	"Starting Component","Enter new starting component",maxlen,
	dec_places,INT_DATA,1,max_val,min_val,&value))
	starting_component = value;
    return 1;
    }

int twavelet_plot_window::plot_wavelet (twavelet *wavelet,
	char *wavelet_name) {
    float *data;
    float view_scale = 0.75;
    int i,n = no_of_components;
    int gr_x,gr_y,old_gr_x,old_gr_y;
    char descr[15];
    HCURSOR save_cursor,hour_glass_cursor;
    UINT old_text_align;
    if (gr.hDC) release_dc (&gr);
    if (!graph_setup(&gr)) return 1;
    if (!(data = allocate_f_vector (1,n))) return 1;
    hour_glass_cursor = LoadCursor(NULL,IDC_WAIT);
    save_cursor = SetCursor (hour_glass_cursor);
    for (i=0;i<=n;i++)
	data[i] = 0.0;
    data[starting_component] = 1.0;
    wavelet->inverse_transform(data,n);

    if (wavelet_name)
       sprintf (gr_setup.graph_title,"%s",wavelet_name);

    if (gr_setup.scale_window_from_data) {
       /* Determine max-min values from data  */
	gr_setup.x_min = 1;
	gr_setup.x_max = n*view_scale;
	gr_setup.y_min = data[1];
	gr_setup.y_max = data[1];

	for (i=1;i<=n;i++) {
	    if (data[i] < gr_setup.y_min)
	       gr_setup.y_min = data[i];
	    if (data[i] > gr_setup.y_max)
	       gr_setup.y_max = data[i];
	    }  // end i
     }  // end if

     set_graph_max_min_2 (&gr_setup,&gr);

     clear_window (&gr);
     draw_border(&gr_setup,&gr,1);
     draw_border_axes(&gr_setup,&gr);
     display_title (&gr_setup,&gr);
     graph_x_y_labels (&gr_setup,&gr);

     xy_to_window_col_row (&gr,1,data[1],
	   &gr_x,&gr_y);
     draw_color_line (&gr,gr_x,gr_y,gr_x,gr_y,
	   gr_setup.line_color);
     old_gr_x = gr_x;
     old_gr_y = gr_y;

     for (i=2;i<=n*view_scale;i++) {
	 xy_to_window_col_row (&gr,i,
		 data[i],&gr_x,&gr_y);
	 draw_color_line (&gr,old_gr_x,old_gr_y,gr_x,gr_y,
		 gr_setup.line_color);
	 old_gr_x = gr_x;
	 old_gr_y = gr_y;
	 }  // end i

    SetTextColor (gr.hDC,gr_setup.text_color);
    old_text_align = GetTextAlign (gr.hDC);
    SetTextAlign (gr.hDC,TA_BOTTOM | TA_LEFT);
    sprintf (descr,"Comp: %d",starting_component);
    TextOut(gr.hDC,gr.iter_col,gr.y_max_row + 2*gr.y_space,
	     descr,strlen(descr));
    SetTextAlign (gr.hDC,old_text_align);

    SetCursor (save_cursor);
    free_f_vector (data,1);
    set_dc_and_mode (&gr);
    save_image_to_bitmap();
    if (wavelet_name) {
       sprintf ((char *)the_title,"%s: (%d)",
	 wavelet_name,starting_component);
       SetWindowText (hwindow,the_title);
       }
    return 1;
    }

int twavelet_plot_window::OnPlotHaarWavelet(void) {
    return plot_wavelet (Haar_wavelet,"Haar Wavelet");
    }

int twavelet_plot_window::OnPlotDaub4Wavelet(void) {
    return plot_wavelet (Daub4_wavelet,"Daub4 Wavelet");
    }

int twavelet_plot_window::OnPlotDaub6Wavelet(void) {
    return plot_wavelet (Daub6_wavelet,"Daub6 Wavelet");
    }

int twavelet_plot_window::respond_wm_command (WPARAM wParam,
    LPARAM) {
    switch (wParam)
       {
       case WAV_SET_COMP:
	    return set_starting_component();
       case WAV_PLOT_HAAR:
	    return OnPlotHaarWavelet();
       case WAV_PLOT_DAUB4:
	    return OnPlotDaub4Wavelet();
       case WAV_PLOT_DAUB6:
	    return OnPlotDaub6Wavelet();
       }  // end switch
    return tmdi_graph_window::respond_wm_command (wParam,0L);
    }

int twavelet_plot_window::respond_wm_close () {
    // Override query
    return 0;
    }

int twavelet_plot_window::respond_wm_destroy (HWND hwnd) {
    delete Haar_wavelet;
    delete Daub4_wavelet;
    delete Daub6_wavelet;
    return tmdi_graph_window::respond_wm_destroy (hwnd);
    }



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -