GreenOpenPaint的实现(三)添加标尺

简介: 标尺对于图像处理程序,特别是需要精确测量的程序来说意义很大。这里进行了专门的研究。基于现在已经引入的类和定义的变量,主要讲一讲如何调用。1、添加放大缩小void CGreenOpenPaintDoc::ScaleFactorZoomIn(void){    if (m_fScaleFac...

标尺对于图像处理程序,特别是需要精确测量的程序来说意义很大。这里进行了专门的研究。

基于现在已经引入的类和定义的变量,主要讲一讲如何调用。
1、添加放大缩小
void CGreenOpenPaintDoc::ScaleFactorZoomIn(void)
{
    if (m_fScaleFactor < ZOOM_MAX)
    {
        m_fScaleFactor = m_fScaleFactor*2;
    } 
}
 
 
void CGreenOpenPaintDoc::ScaleFactorZoomOut(void)
{
    if (m_fScaleFactor > ZOOM_MIN)
    {
        m_fScaleFactor = m_fScaleFactor /2;
    } 
}
2、在view中添加添加warpper 
void CGreenOpenPaintView::OnUpdate(CViewpSenderLPARAM lHintCObjectpHint)
{
    SetScrollSizes(MM_TEXT,
        CSize(int(m_pDoc->m_image.Width()*m_pDoc->m_fScaleFactor),
        int(m_pDoc->m_image.Height()*m_pDoc->m_fScaleFactor)));
    UpdateRulersInfo(RW_POSITIONGetScrollPosition());
    Invalidate();
}
 
void CGreenOpenPaintView::UpdateRulersInfo(int nMessageCPoint ScrollPosCPoint Pos)
{
    if (!m_pParent)
        return;
 
    CSize  m_ImageSize = CSize(m_pDoc->m_image.Width(),m_pDoc->m_image.Height());
    stRULER_INFO pRulerInfo;
    pRulerInfo.uMessage    = nMessage;
    pRulerInfo.ScrollPos   = ScrollPos;
    pRulerInfo.Pos         = Pos;
    pRulerInfo.DocSize     = m_ImageSize;
    pRulerInfo.fZoomFactor =  m_pDoc   ->m_fScaleFactor;
    m_pParent->UpdateRulersInfo(pRulerInfo);
}
3、mainframe中添加 warpper 
void CMainFrame::UpdateRulersInfo(stRULER_INFO stRulerInfo)
{
    m_Rulers.UpdateRulersInfo(stRulerInfo);
}
 
 
void CMainFrame::ShowRulers(bool bShow)
{
    m_Rulers.ShowRulers(bShow);
}
注意要把m_ruler添入
private:
    CRulerSplitterWnd m_Rulers;
4、重写mainframe 的 oncreateclient事件
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContextpContext)
{
    if (!m_Rulers.CreateRulers(thispContext)) {
        TRACE("rulers创建失败\n");
        return CFrameWnd::OnCreateClient(lpcspContext);
    }
    return TRUE;    
}
这个时候标尺出现,只不过由于没有指示量纲,所以没有画刻度
p.s 注意这个时候,一定要在view创建的时候进行scroll尺度的初始化,否则会assert错误
   CGreenOpenPaintView :: CGreenOpenPaintView ()
    : m_pParent(NULL)
    , m_pDoc(NULL)
{
    // TODO: 在此处添加构造代码
    CSize sizeTotal;
    sizeTotal.cx = sizeTotal.cy = 100;
    SetScrollSizes(MM_TEXTsizeTotal);
}
 
当导入图片的时候,出现真实标尺。这里是按照厘米这个量纲进行计算的。


代码

http://files.cnblogs.com/files/jsxyhelu/GreenOpenPaint2.rar



目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
vr&ar
3DMax教程 教你在3DMax中怎么渲染黑色的描边
渲染黑色的描边有三种方法: 1、VR材质的漫反射贴图给一个VR边纹理材质,颜色给黑色,添加一个特效。 2、还有一种就是原地复制一个模型,给个Lattice修改器,然后给个黑色材质 3、复制一个模型给个Lattice修改器变成线型,给个黑色材质
382 0
3DMax教程 教你在3DMax中怎么渲染黑色的描边
Echarts折线图line-stack数值和数值显示不一致
Echarts折线图line-stack数值和数值显示不一致
199 0
Echarts折线图line-stack数值和数值显示不一致
|
前端开发 Android开发 API
自定义控件详解(六):Paint 画笔MaskFilter过滤
首先看一个API:setMaskFilter(MaskFilter maskfilter): 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等。 以下有两个MaskFilter的子类可供选择: BlurMaskFilter:指定了一个模糊的样式和半径来处理Paint的边缘。
1000 0