java实现rle编码_RLE编码算法

1 2 //RLEDlg.cpp : 实现文件3 //4 5 #include"stdafx.h"6 #include"RLE.h"7 #include"RLEDlg.h"8 9 #ifdef _DEBUG10 #definenew DEBUG_NEW11 #endif12 13 structrepeate14 {15 intname;16 intnum ;17 }all[8][8];18 //用于应用程序“关于”菜单项的 CAboutDlg 对话框19 20 //判断该数是否存在21 intisExistInArray(intb,intj)22 {23 for(inti=0;i<8;i++)24 {25 if(all[j][i].name==b)26 {27 returni;28 }29 }30 return-1;31 }32 33 34 classCAboutDlg :publicCDialog35 {36 public:37 CAboutDlg();38 39 //对话框数据40 enum{ IDD=IDD_ABOUTBOX };41 42 protected:43 virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV 支持44 45 //实现46 protected:47 DECLARE_MESSAGE_MAP()48 };49 50 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)51 {52 }53 54 voidCAboutDlg::DoDataExchange(CDataExchange*pDX)55 {56 CDialog::DoDataExchange(pDX);57 }58 59 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)60 END_MESSAGE_MAP()61 62 63 //CRLEDlg 对话框64 65 66 67 68 CRLEDlg::CRLEDlg(CWnd*pParent/*=NULL*/)69 : CDialog(CRLEDlg::IDD, pParent)70 {71 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);72 }73 74 voidCRLEDlg::DoDataExchange(CDataExchange*pDX)75 {76 CDialog::DoDataExchange(pDX);77 }78 79 BEGIN_MESSAGE_MAP(CRLEDlg, CDialog)80 ON_WM_SYSCOMMAND()81 ON_WM_PAINT()82 ON_WM_QUERYDRAGICON()83 //}}AFX_MSG_MAP84 ON_BN_CLICKED(IDC_BTN_GET_ORIGION,&CRLEDlg::OnBnClickedBtnGetOrigion)85 ON_BN_CLICKED(IDC_GETRLE,&CRLEDlg::OnBnClickedGetrle)86 END_MESSAGE_MAP()87 88 89 //CRLEDlg 消息处理程序90 91 BOOL CRLEDlg::OnInitDialog()92 {93 CDialog::OnInitDialog();94 95 //将“关于...”菜单项添加到系统菜单中。96 97 //IDM_ABOUTBOX 必须在系统命令范围内。98 ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);99 ASSERT(IDM_ABOUTBOX<0xF000);100 101 CMenu*pSysMenu=GetSystemMenu(FALSE);102 if(pSysMenu!=NULL)103 {104 BOOL bNameValid;105 CString strAboutMenu;106 bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);107 ASSERT(bNameValid);108 if(!strAboutMenu.IsEmpty())109 {110 pSysMenu->AppendMenu(MF_SEPARATOR);111 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);112 }113 }114 115 //设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动116 //执行此操作117 SetIcon(m_hIcon, TRUE);//设置大图标118 SetIcon(m_hIcon, FALSE);//设置小图标119 120 //TODO: 在此添加额外的初始化代码121 122 returnTRUE;//除非将焦点设置到控件,否则返回 TRUE123 }124 125 voidCRLEDlg::OnSysCommand(UINT nID, LPARAM lParam)126 {127 if((nID&0xFFF0)==IDM_ABOUTBOX)128 {129 CAboutDlg dlgAbout;130 dlgAbout.DoModal();131 }132 else133 {134 CDialog::OnSysCommand(nID, lParam);135 }136 }137 138 //如果向对话框添加最小化按钮,则需要下面的代码139 //来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,140 //这将由框架自动完成。141 142 voidCRLEDlg::OnPaint()143 {144 if(IsIconic())145 {146 CPaintDC dc(this);//用于绘制的设备上下文147 148 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()),0);149 150 //使图标在工作区矩形中居中151 intcxIcon=GetSystemMetrics(SM_CXICON);152 intcyIcon=GetSystemMetrics(SM_CYICON);153 CRect rect;154 GetClientRect(&rect);155 intx=(rect.Width()-cxIcon+1)/2;156 inty=(rect.Height()-cyIcon+1)/2;157 158 //绘制图标159 dc.DrawIcon(x, y, m_hIcon);160 }161 else162 {163 CDialog::OnPaint();164 }165 }166 167 //当用户拖动最小化窗口时系统调用此函数取得光标168 //显示。169 HCURSOR CRLEDlg::OnQueryDragIcon()170 {171 returnstatic_cast(m_hIcon);172 }173 174 //获取默认图像175 voidCRLEDlg::OnBnClickedBtnGetOrigion()176 {177 //TODO: 在此添加控件通知处理程序代码178 for(inti=1009;i<=1072;++i)179 {180 if(i<1017)181 {182 GetDlgItem(i)->SetWindowText(L"5");183 }184 elseif(i<1021)185 {186 GetDlgItem(i)->SetWindowText(L"6");187 }188 elseif(i<1030)189 {190 GetDlgItem(i)->SetWindowText(L"9");191 }192 elseif(i<1035)193 {194 GetDlgItem(i)->SetWindowText(L"8");195 }196 elseif(i<1041)197 {198 GetDlgItem(i)->SetWindowText(L"7");199 }200 elseif(i<1049)201 {202 GetDlgItem(i)->SetWindowText(L"4");203 }204 elseif(i<1054)205 {206 GetDlgItem(i)->SetWindowText(L"6");207 }208 elseif(i<1060)209 {210 GetDlgItem(i)->SetWindowText(L"3");211 }212 elseif(i<1065)213 {214 GetDlgItem(i)->SetWindowText(L"8");215 }216 elseif(i<1069)217 {218 GetDlgItem(i)->SetWindowText(L"5");219 }220 else221 GetDlgItem(i)->SetWindowText(L"9");222 }223 224 }225 //RLE编码226 voidCRLEDlg::OnBnClickedGetrle()227 {228 //TODO: 在此添加控件通知处理程序代码229 //将数组清零230 ClearArray();231 intnumber[8][8];232 intstart=1009;233 inttemp=0;234 CString str;235 intz=0;236 CStringout;237 for(inti=0;i<8;i++)238 {239 for(intj=0;j<8;j++)240 {241 //依次取了每个控件的值242 GetDlgItem(start)->GetWindowText(str);243 //转换成整形244 temp=_wtoi(str);245 //保存至数组中246 number[i][j]=temp;247 start++;248 }249 }250 for(intj=0;j<8;j++)251 {252 z=0;253 for(inti=0;i<8;++i)254 {255 intb=isExistInArray(number[j][i],j);256 if(b!=-1)257 {258 all[j][b].num++;259 }260 else261 {262 all[j][z].name=number[j][i];263 all[j][z].num++;264 z++;265 }266 }267 }268 CString strCount;269 for(intj=0;j<8;++j)270 for(inti=0;i<8;++i)271 {272 if(all[j][i].name!=0)273 {274 strCount.Format(L"%d",all[j][i].name);275 out+=strCount+L"";276 strCount.Format(L"%d",all[j][i].num);277 out+=strCount+L"";278 }279 }280 //显示RLE结果281 GetDlgItem(IDC_EDIT_RESULT)->SetWindowText(out);282 }283 //将结果清零284 voidCRLEDlg::ClearArray()285 {286 for(inti=0;i<8;++i)287 for(intj=0;j<8;j++)288 {289 all[i][j].name=0;290 all[i][j].num=0;291 }292 293 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值