不管构图如何,单来看硬伤:
1。曝光不准确
2。片子太肉

解决的方式为:
1。多拍片,练习
2。上个三脚架
posted @ 2008-06-10 22:08 亨德列克 阅读(149) | 评论 (0)编辑 收藏
 
  1. 构架的目的是为了解决问题,而不是“构架”;即我们是为了解决问题而做的构架,而不是为了构架而做的构架

  2. 构架是在思考如何解决问题的过程中,做出的一系列设计;这些设计可能考虑比较全面,可能不全面,可能扩展性强,也可能很弱;这些设计综合起来,就是构架;把他们文档化,以自然语言、图表的形式描述清楚,就是构架文档或者叫做设计文档
  3. 在设计的过程中,可能会做一些实验型的编码甚至是实质性的编码,也可能不做;前者,可以认为是一边设计一边编码;后者可以认为是纯设计。个人认为后者需要对代码的极高驾驭能力,代码存在于心中。至于前者,如果由开发人员来做,就是一边构架一边编码;若由设计人员来做,那就是等设计完以后,文档化,开发人员照着写。
  4. 对于3,后一种开发方式较传统,效率较低,但是协作、开发容易规范;前一种开发方式开发中容易走弯路,但是反复迭代、重构(小范围),开发效率较高,团队也较紧凑。所以,前者适合一般项目,后者适合大型项目。
  5. 对于3,前者是敏捷的,后者是传统的。
  6. 这些文字是用来安慰自己的。
posted @ 2008-06-05 18:15 亨德列克 阅读(945) | 评论 (2)编辑 收藏
 

以前的时候,总看到书上说构架应该怎样怎样,分几步几步,怎么做怎么做;可是写了这么久程序,发现完全不是这么回事。随着时间的推移,花在构架上的时间越来越少,不知道是不是我退步了,唉

posted @ 2008-06-05 17:32 亨德列克 阅读(117) | 评论 (0)编辑 收藏
 
最近有点痴迷用ASP.NET做网站,于是就动手学着写一点
感想还是蛮多的,最大的一个感觉就是,很白痴。基本上按照人的思路,去写代码就行了,跟自然语言也差不多。感觉很爽,可是总觉得代码很恶心,少了点编程的乐趣
posted @ 2008-04-12 20:56 亨德列克 阅读(152) | 评论 (1)编辑 收藏
 

作为GDI的升级版本的GDI+实在是个好东西,以前要播放GIF什么的,要引入其他辅助库,或者自己写GIF的读取过程。不过有了GDI+,这些事情都不必再操心了。

在GDI+的设计中,IMAGE本来就是分页、分帧的;可以说,GDI+的IMAGE的设计,本身就是考虑到了几乎目前所有主流图片格式的共性而设计出来的。废话不多说,贴上代码,看GDI+是如何播放GIF的

首先是GIF的载入:

void CGIFControl::Load(LPCTSTR sFileName)
{
    m_pImage = new Image(sFileName);
    UINT count = m_pImage->GetFrameDimensionsCount();
    m_pDimensionIDs =new GUID[count];
    m_pImage->GetFrameDimensionsList(m_pDimensionIDs, count);
    WCHAR strGuid[39];
    StringFromGUID2(m_pDimensionIDs[0], strGuid, 39);
    m_FrameCount = m_pImage->GetFrameCount(&m_pDimensionIDs[0]);

    //PropertyTagFrameDelay是GDI+中预定义的一个GIG属性ID值,表示标签帧数据的延迟时间
    UINT TotalBuffer = m_pImage->GetPropertyItemSize(PropertyTagFrameDelay);
    m_pItem = (PropertyItem*)malloc(TotalBuffer);
    m_pImage->GetPropertyItem(PropertyTagFrameDelay,TotalBuffer,m_pItem);
}

接着给出播放的代码,值得注意的是,播放我选择了使用WM_TIMER消息,而不是像有些(还比较主流)开源的GIF播放库那样,单独开一个线程来播放,主要是没必要开线程,系统复杂度还高一些(个人意见)。需要注意的一点就是,绘制GIF帧之前,需要用SelectActiveFrame把那个帧设置为当前绘制的帧。

void CGIFControl::OnTimer(UINT_PTR nIDEvent)
{
    KillTimer(nIDEvent);

    GUID Guid = FrameDimensionTime;
    m_pImage->SelectActiveFrame(&Guid,m_iCurrentFrame);

    SetTimer(1,((UINT*)m_pItem[0].value)[m_iCurrentFrame] * 10,NULL);

    m_iCurrentFrame = (++ m_iCurrentFrame) % m_FrameCount;
    Invalidate(FALSE);
}

 

绘制的代码不多说了,地球人都知道

Graphics g(lpDrawItemStruct->hDC);

            DrawBorder(g);
            CRect rcClient;
            GetClientRect(&rcClient);

            if(m_bBorderEnable)
            {
                rcClient.DeflateRect(m_iBorderLineWidth,m_iBorderLineWidth,m_iBorderLineWidth,m_iBorderLineWidth);
            }

            g.DrawImage(m_pImage,rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height());

 

好了,就这么多。

posted @ 2008-03-29 15:32 亨德列克 阅读(2782) | 评论 (2)编辑 收藏
仅列出标题
共2页: 1 2