当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·怎样修改恶意的默认主页    »显示摘要«
    摘要: 在一台win2000的电脑上,不知道上了什么网站,每次打开ie浏览器时,都会自动上http://www.ktv530.com/网站,另外还附带一大批别的网站。 我在ie属性里把主页地址设为“使用空白页”,但电脑重启之后还是会自动链接到http://www.ktv530.com/,我都给它烦死了 听说要在注册表里修改,但不知道怎么改,哪位高手请指点,高分相宋!!! ......
 ·如何关闭主板的鸣声    »显示摘要«
    摘要: 用到一个软件,编译出错时主板上会发出鸣声,晚上总是会吵到舍友, 想关掉鸣声,但又希望系统在必要时主板可以发出报警声,应该怎么做? thx! ......


求类似PHOTOSHOP直方图程序,高分

我最近一直在搞这个东西,但是做出来的效果与PHOTOSHOP的相差很大,希望大家可以帮忙,THANKS!

NO.1   作者: zzwu

1.求出彩色图像的每个像素的亮度或灰度等级,它的值必为0-255之一  
  2.统计具有灰度等级为0-255的像素数目t[i],i=0,255  
  3.求出t[i]最大值,tmax,并确定一个高为h宽为256矩形区域  
  4.利用t[i],i=0,255依次在区域中,从做到有还直线,高度=h*t[i]/256;  
   
 

NO.2   作者: dscky

不如把代码贴出来,大家找找,原理大家都懂。就是操作时有差异。

NO.3   作者: justju

vc中绘制直方图的源程序:绝地正确。  
   
   
   
  //   DlgHistShow1.cpp   :   implementation   file  
  //  
   
  #include   "stdafx.h"  
  #include   "ImageProcessing.h"  
  #include   "DlgHistShow1.h"  
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]   =   __FILE__;  
  #endif  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   CDlgHistShow   dialog  
   
   
  CDlgHistShow::CDlgHistShow(CWnd*   pParent   /*=NULL*/)  
  :   CDialog(CDlgHistShow::IDD,   pParent)  
  {  
  //{{AFX_DATA_INIT(CDlgHistShow)  
  //   NOTE:   the   ClassWizard   will   add   member   initialization   here  
  //}}AFX_DATA_INIT  
  }  
   
   
  void   CDlgHistShow::DoDataExchange(CDataExchange*   pDX)  
  {  
  CDialog::DoDataExchange(pDX);  
  //{{AFX_DATA_MAP(CDlgHistShow)  
  //   NOTE:   the   ClassWizard   will   add   DDX   and   DDV   calls   here  
  //}}AFX_DATA_MAP  
  }  
   
   
  BEGIN_MESSAGE_MAP(CDlgHistShow,   CDialog)  
  //{{AFX_MSG_MAP(CDlgHistShow)  
  ON_WM_PAINT()  
  //}}AFX_MSG_MAP  
  END_MESSAGE_MAP()  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   CDlgHistShow   message   handlers  
   
  BOOL   CDlgHistShow::OnInitDialog()    
  {  
  CDialog::OnInitDialog();  
   
  //   TODO:   Add   extra   initialization   here  
   
  //   设置直线原图象象素的指针  
  unsigned   char   *   lpSrc;  
   
  //   循环变量  
  int   i,j;  
   
  //   获取绘制直方图的标签  
  CWnd*   pWnd   =   GetDlgItem(IDC_DLG_HIST_SHOW);  
   
  //   计算得到直方图  
  //   图象的高度和宽度  
  CSize   sizeImage;  
  sizeImage   =   m_pDib->GetDimensions();  
   
   
  //   获得图象数据存储的高度和宽度  
  CSize   sizeSaveImage;  
  sizeSaveImage   =   m_pDib->GetDibSaveDim();  
   
  //   重置计数为0  
  for   (i   =   0;   i   <   256;   i   ++)  
  {  
  //   清零  
  m_nHist[i]   =   0;  
  }  
   
  //   计算各个灰度值的计数,即得到直方图  
  for   (i   =   0;   i   <   sizeImage.cy;   i   ++)  
  {  
  for   (j   =   0;   j   <   sizeImage.cx;   j   ++)  
  {  
  lpSrc   =   (unsigned   char   *)m_pDib->m_lpImage   +   sizeSaveImage.cx   *   i   +   j;  
   
  //   计数加1  
  m_nHist[*(lpSrc)]++;  
  }  
  }  
   
  return   TRUE;     //   return   TRUE   unless   you   set   the   focus   to   a   control  
                              //   EXCEPTION:   OCX   Property   Pages   should   return   FALSE  
  }  
   
  void   CDlgHistShow::OnPaint()    
  {  
  CPaintDC   dc(this);   //   device   context   for   painting  
   
  //   TODO:   Add   your   message   handler   code   here  
   
   
  //   循环变量  
  int   i;  
  //   获取绘制直方图文本框的标签  
  CWnd*   pWnd   =   GetDlgItem(IDC_DLG_HIST_SHOW);  
   
  //   获取设备上下文  
  CDC*   pDC   =   pWnd->GetDC();  
  pWnd->Invalidate();  
  pWnd->UpdateWindow();  
   
  pDC->Rectangle(0,   0,   330,   300);  
   
  //   创建画笔对象  
  CPen*   pPenRed   =   new   CPen;  
   
  //   创建红色画笔  
  pPenRed->CreatePen(PS_SOLID,   1,   RGB(255,0,0));  
   
  //   选入红色画笔,并保存以前的画笔  
  CPen*   pOldPen   =   pDC->SelectObject(pPenRed);  
   
  //   绘制坐标轴  
  pDC->MoveTo(10,10);  
   
  //   绘制垂直轴  
  pDC->LineTo(10,   280);  
   
  //   绘制水平轴  
  pDC->LineTo(320,   280);  
   
  //   绘制X轴刻度值  
  CString   strTemp;  
  strTemp.Format("0");  
  pDC->TextOut(10,   283,   strTemp);  
  strTemp.Format("50");  
  pDC->TextOut(60,   283,   strTemp);  
  strTemp.Format("100");  
  pDC->TextOut(110,   283,   strTemp);  
  strTemp.Format("150");  
  pDC->TextOut(160,   283,   strTemp);  
  strTemp.Format("200");  
  pDC->TextOut(210,   283,   strTemp);  
  strTemp.Format("255");  
  pDC->TextOut(265,   283,   strTemp);  
   
  //   绘制X轴刻度  
  for   (i   =   0;   i   <   256;   i   +=   5)  
  {  
  if   ((i   &   1)   ==   0)  
  {  
  //   10的倍数  
  pDC->MoveTo(i   +   10,   280);  
  pDC->LineTo(i   +   10,   284);  
  }  
  else  
  {  
  //   5的奇数倍数  
  pDC->MoveTo(i   +   10,   280);  
  pDC->LineTo(i   +   10,   282);  
  }  
  }  
   
  //   绘制X轴箭头  
  pDC->MoveTo(315,275);  
  pDC->LineTo(320,280);  
  pDC->LineTo(315,285);  
   
  //   绘制Y轴箭头  
  pDC->MoveTo(10,10);  
  pDC->LineTo(5,15);  
  pDC->MoveTo(10,10);  
  pDC->LineTo(15,15);  
   
  //   直方图中最大计数值  
  LONG   lMaxCount   =   0;  
   
  //   计算最大计数值  
  for   (i   =   0;   i   <=   255;   i   ++)  
  {  
  //   判断是否大于当前最大值  
  if   (m_nHist[i]   >   lMaxCount)  
  {  
  //   更新最大值  
  lMaxCount   =   m_nHist[i];  
  }  
  }  
   
  //   输出最大计数值  
  pDC->MoveTo(10,   25);  
  pDC->LineTo(14,   25);  
  strTemp.Format("%d",   lMaxCount);  
  pDC->TextOut(11,   26,   strTemp);  
   
  //   声名画笔对象  
  CPen*   pPenBlue   =   new   CPen;  
   
  //   创建蓝色画笔  
  pPenBlue->CreatePen(PS_SOLID,   1,   RGB(0,0,255));  
   
  //   选入蓝色画笔  
  pDC->SelectObject(pPenBlue);  
   
  //   判断是否存在计数值  
  if(lMaxCount   >   0){  
  //   绘制直方图  
  for   (i   =   0;   i   <=   255;   i   ++)  
  {  
  pDC->MoveTo(i   +   10,   280);  
  pDC->LineTo(i   +   10,   281   -   (int)   (m_nHist[i]   *   256   /   lMaxCount));  
  }  
  }  
   
  //   恢复以前的画笔  
  pDC->SelectObject(pOldPen);  
   
  //   删除新的画笔  
  delete   pPenRed;  
  delete   pPenBlue;  
  }  
 


 ·小程序,怎么返回不正确呢    »显示摘要«
    摘要: #include <stdio.h> #include <stdlib.h> #include <math.h> char* reservedint(int); main(){ int inputint=0; printf("please input a integer"); scanf("%d",&inp......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE