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

📄 基于 linux 和 minigui 的嵌入式系统软件开发指南(五).htm

📁 详细的介绍了minigui的原理及其在linux上的实现.
💻 HTM
📖 第 1 页 / 共 4 页
字号:
        return;

    bitmap.bmType = BMP_TYPE_ALPHACHANNEL;

    /* 位图的 Alpha 混和 */
    start_tick = GetTickCount ();
    count = 1000;
    while (count--) {
        tox = rand() % 800;
        toy = rand() % 800;

        /* 设置随机 Alpha 通道值 */
        bitmap.bmAlpha = rand() % 256;
        /* 显示到窗口 DC 上 */
        FillBoxWithBitmap (hdc, tox, toy, 0, 0, &bitmap);
    }
    end_tick = GetTickCount ();
    TellSpeed (hwnd, start_tick, end_tick, "Alpha Blended Bitmap", 1000);

    bitmap.bmType = BMP_TYPE_ALPHACHANNEL | BMP_TYPE_COLORKEY;
    /*  取第一个象素点值,并设置为透明象素值 */
    bitmap.bmColorKey = GetPixelInBitmap (&bitmap, 0, 0);

    /* 透明及 Alpha 混和 */
    start_tick = GetTickCount ();
    count = 1000;
    while (count--) {
        tox = rand() % 800;
        toy = rand() % 800;

        /*  设置一个随机 Alpha 通道值 */
        bitmap.bmAlpha = rand() % 256;
        /* 显示到窗口 DC 上 */
        FillBoxWithBitmap (hdc, tox, toy, 0, 0, &bitmap);
    }
    end_tick = GetTickCount ();
    TellSpeed (hwnd, start_tick, end_tick, "Alpha Blended Transparent Bitmap", 1000);

    UnloadBitmap (&bitmap);
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <P>你也可以通过 CreateMemDCFromBitmap 函数将某个 BITMAP 对象转换成内存 DC 
      对象。该函数的原型如下(src/gdi.h):</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>HDC GUIAPI CreateMemDCFromBitmap (HDC hdc, BITMAP* bmp);
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <P>需要注意的是,从 BITMAP 对象创建的内存 DC 直接使用 BITMAP 对象中的 bmBits 
      所指向的内存,该内存存在于系统内存,而不是显示内存中。</P>
      <P>和 BITMAP 相关的 MYBITMAP 结构,新的 GDI 也做了一些增强。MYBITMAP 可以看成是设备无关的位图结构,你也可以利用 
      CreateMemDCFromMyBitmap 函数将一个 MYBITMAP 对象转换成内存 DC。该函数的原型如下(src/gdi.h):</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE><BR>
HDC GUIAPI CreateMemDCFromMyBitmap (HDC hdc, MYBITMAP* mybmp);<BR>

</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <P>需要注意的是,许多 GAL 引擎不能对系统内存到显示内存的 BitBlt 操作提供硬件加速,所以,FillBoxWithBitmap 
      函数,以及从 BITMAP 对象或者 MYBITMAP 对象创建的内存 DC 无法通过硬件加速功能快速 BitBlt 到其他 DC 
      上。如果希望达到这样的效果,可以通过预先创建的建立于显示内存中的 DC 进行快速的 BitBlt 运算。</P>
      <P><SPAN class=atitle3>4.5 新的 GDI 绘图函数</SPAN><BR>除了光栅操作意外,还添加了一些有用的 GDI 
      绘图函数,包括 FillRect、FillCircle 
      等等,我们将在接下来的开发中,将继续添加诸如椭圆、圆弧、三次样条曲线、多边形填充等高级绘图函数。目前新增的 GDI 函数有:</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>void GUIAPI FillRect (HDC hdc, int x, int y, int w, int h);
void GUIAPI FillCircle (HDC hdc, int sx, int sy, int r);

BOOL GUIAPI ScaleBitmap (BITMAP* dst, const BITMAP* src);

BOOL GUIAPI GetBitmapFromDC (HDC hdc, int x, int y, int w, int h, BITMAP* bmp);

gal_pixel GUIAPI GetPixelInBitmap (const BITMAP* bmp, int x, int y);
BOOL GUIAPI SetPixelInBitmap (const BITMAP* bmp, int x, int y, gal_pixel pixel);
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <OL class=n01>
        <LI>FillRect 函数填充指定矩形,受当前光栅操作影响。 
        <LI>FillCircle 函数填充指定的圆,受当前光栅操作影响。 
        <LI>ScaleBitmap 函数将源 BITMAP 对象进行伸缩处理。 
        <LI>GetBitmapFromDC 函数将指定矩形范围内的象素复制到 BITMAP 对象中。 
        <LI>GetPixelInBitmap 函数获得 BITMAP 对象中指定位置的象素值。 
        <LI>SetPixelInBitmap 函数设置 BITMAP 对象中指定位置的象素值。 </LI></OL>
      <P><A id=5 name=5><SPAN class=atitle2>5 其他</SPAN></A><BR>尽管在 1.1.0Pre4 
      以及其后版本对 MiniGUI 的 GAL 和 GDI 进行了大规模的改造,但在新版本中仍然可以利用老的 GAL 和 GDI 
      接口,从而提供对低端显示设备的支持。需要注意的是,虽然新 GDI API 
      当中的许多结构和函数具有相同的名称,但某些函数已经被重新定义。所以,在编写应用程序的时候,要特别注意这一点。比如:新的 mde 
      演示程序当中,就利用了在 &lt;minigui/config.h&gt; 中定义的 _USE_NEWGAL 宏来判断是否使用新的 GAL 和 
      GDI 函数,如下所示:</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>#include &lt;minigui/common.h&gt;
#include &lt;minigui/minigui.h&gt;
#include &lt;minigui/gdi.h&gt;

......
#ifdef _USE_NEWGAL
    SetRasterOperation (hdc, ROP_XOR);
    FillRect (hdc, 0, 0, 200, 200);
#else
    /* Not implemented */
#endif
......</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <P><A id=6 name=6><SPAN class=atitle2>6 小结</SPAN></A><BR>本文重点介绍了在 MiniGUI 
      1.1.0 版本开发过程中新增的 GAL、GDI 功能和接口。新的 GAL 和 
      GDI重点针对高端图形应用进行了优化和功能增强,其中包括透明处理、Alpha 混和等高级特性,并且能够对硬件加速功能提供良好支持。本文分别就 GAL 
      和 GDI 的关系、GAL 的功能特性、GDI 的增强接口等方面较为全面地介绍了新的 GAL 和 GDI 接口。希望能够对程序开发有所帮助。</P><!-- Make author heading singular or plural as needed -->
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><A id=author1 name=author1><SPAN class=atitle2>关于作者</SPAN></A> 
            <BR>魏永明(<A 
            href="mailto:ymwei@minigui.org">ymwei@minigui.org</A>),男,27 
            岁,工学硕士。国内最有影响的自由软件项目之一--MiniGUI 的创始人及主要开发人员。著有《Linux 实用教程》与《学用 Linux 
            与 Windows NT》,并主持翻译了《Red Hat Linux 奥秘》、《Linux 编程宝典》 等大量优秀的 Linux 
            技术著作。是清华大学 AKA Linux 
编程技术系列讲座的主讲人。</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE>
  <TBODY>
  <TR>
    <TD width=10><IMG height=1 alt="" 
      src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/c.gif" width=10 
  border=0></TD></TR></TBODY></TABLE><BR clear=all><IMG height=10 alt="" 
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/c.gif" width=100 border=0><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR vAlign=top>
    <TD align=right width="100%"><A 
      href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/guide/part5/index.shtml#top">到页首</A></TD>
    <TD width=5><IMG height=1 alt="" 
      src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/c.gif" width=5 
  border=0></TD></TR>
  <TR vAlign=top>
    <TD bgColor=#000000 colSpan=2><IMG height=1 alt="" 
      src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/c.gif" width=100 
  border=0></TD></TR>
  <TR vAlign=top>
    <TD bgColor=#ffffff colSpan=2><IMG height=8 alt="" 
      src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/c.gif" width=100 
  border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
  <TBODY>
  <TR vAlign=top>
    <TD>
      <FORM action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument 
      method=post><INPUT type=hidden 
      value="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南--MiniGUI 1.1.0 版本引入的新 GDI 功能和函数" 
      name=ArticleTitle> <INPUT type=hidden value=linux name=Zone> <INPUT 
      type=hidden value=/developerWorks/cn/thankyou/feedback-linux.html 
      name=RedirectURL> <A id=rating name=rating><B>您对这篇文章的看法如何?</B></A> 
      <TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
        <TBODY>
        <TR>
          <TD colSpan=5><IMG height=8 alt="" 
            src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/c.gif" width=100 
            border=0></TD></TR>
        <TR vAlign=top>
          <TD width="16%"><INPUT type=radio value=5 name=Rating>真棒!(5)</TD>
          <TD width="20%"><INPUT type=radio value=4 name=Rating>好材料 (4)</TD>
          <TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 (3)</TD>
          <TD width="22%"><INPUT type=radio value=2 name=Rating>需提高 (2)</TD>
          <TD width="18%"><INPUT type=radio value=1 name=Rating>太差! 
        (1)</TD></TR></TBODY></TABLE><BR><B>建议?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
  <TR vAlign=top>
    <TD bgColor=#ffffff><IMG height=8 alt="" 
      src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/c.gif" width=100 
  border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD align=right>(c) Copyright IBM Corp. 2001, (c) Copyright IBM China 
      2001, All Right Reserved</TD></TR>
  <TR vAlign=top>
    <TD class=bbg height=21>&nbsp;&nbsp;<A class=mainlink 
      href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&amp;origin=dwhead">关于 
      IBM</A><SPAN class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A 
      class=mainlink 
      href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&amp;origin=dwhead">隐私条约</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&amp;origin=dwhead">使用条款</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&amp;origin=dwhead">联系 
      IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files/stats.js" 
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt="" 
src="D:\新建文件夹\基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(五).files\c(1).gif" width=1 
border=0></NOSCRIPT> </A></BODY></HTML>

⌨️ 快捷键说明

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