大旨思想:各位准创业者,不要再想怎样蓝海市场了,沉下心来先干呢(试问连友好的生存都不敢去颠覆,谈什么颠覆互联网,颠覆传统行业,颠覆整个世界呢?)

棋牌,画透明位图

  文/黄健铭微信公众号:huangjianming026

 

  方今跟一个早已的社交圈子狂人,互联网超资深玩家,天使投资人聊天,这厮大情大性。他如今又做出了一个壮举,一个月时间内把半年要投出去的钱都投出去了。从他老是深远看到互联网起势的见识之中,他表露了这一段时间以来对中国几十个创业者的清醒,尽管可能拔取的标本不算多,但是期望能给我们有些启迪。他的最震撼的一句:中国互联网创业,做怎么着都能不负众望。

     
我们在拓展程序的界面设计时,日常希望将位图的显要部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的休戚与共在一块,本文介绍了晶莹剔透位图的炮制知识,并将透明位图在一个会话框中呈现了出来。 

  “中国互联网创业,做什么样都能不负众望。”—坚韧不拔很难堪

 

  也许很五个人看到此间觉得那是一篇成功学,或者是一篇心灵鸡汤。很不满的告诉您,不是,在他说完这句话之后。为这一切做出了更为精确的笺注。

 

  “紧倘若要看团队的信心,这一群人要有一齐的信念,可以坚定不移下来,而不是让别人探囊取物的就挖走,离开。”

一、实现情势

  绘制”透明”位图是指绘制某一位图中除指定颜色外的其它部分,我们称这种颜色为”透明色”。通过将位图的背景观指定为”透明色”,在绘制时,不绘制这部分背景,而仅绘制图像,这样就足以将位图中图像透明地绘制到窗口上。 

  绘制”透明”位图的严重性是创立一个”掩码”位图(mask
bitmap),”掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。在Windows编程中,绘图都要用到装备描述表,我们需成立多少个内存设备描述表:位图设备描述表(image
DC)和”掩码”位图设备描述表(mask
DC)。位图设备描述表用来装入位图,而”掩码”位图设备描述表用来装入”掩码”位图。在”掩码”位图设备描述表中制作”掩码”位图的措施是:先创建一个单色的Bitmap,装入mask
DC,然后,以”SRCCOPY”的情势将兼具位图的位图设备描述表绘制(BitBlt)到mask
DC上。这样,mask DC的展示平面中的位图即是”掩码”位图。 

  一般状况下,绘制”透明”位图的实际操作步骤如下:

1、设置待彰显位图的背景颜色,也就是设置我们目的在于透明突显的位图颜色;

2、位图设备描述表以”SRCINVERT”的方法绘制(BitBlt)到体现设备描述表上;

3、”掩码”位图设备描述表以”SRCAND”的点子绘制(BitBlt)到显示设备描述表上;

4、再将位图设备描述表以”SRCINVERT”的措施绘制(BitBlt)到显示设备描述表上。这样除”透明色”外的其它位图部分(图像部分)就被绘制到窗口上了。

  上述操作中需要采纳的位图展现函数BitBlt()的原型和认证如下:

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int
xSrc, 
int ySrc, DWORD dwRop );

  其中,参数int x表示贴到目标地的左上角X坐标;int
y表示/贴到目标地的左上角Y坐标;int nWidth表示贴到目的地的区域涨幅;int
nHeight表示贴到目标地的区域中度;CDC*
pSrcDC代表存储源位图的设备描述表;int xSrc表示源位图的左上角X坐标;int
ySrc表示源位图的左上角Y坐标;DWORD
dwRop为柵格运算标志(ROP),它显而易见概念了怎么将源文件、目的文件和形式(由现行选出的刷子画笔定义)的位构成去形成一个对象文件。对于具有的配备档次,光栅操作(ROP)只简简单单地在象征位图颜色的每一个bit位上拓展相关操作而不考虑他们的实际意义。微软为位图的光栅操作提供了多种方法,开发人士可以运用不同的重组得到想要的特殊效果。由于篇幅的范围,本文只谈谈四种常用的光栅操作:

 

 

操作方式 

运算方式 

效果 

SRCCOPY  

src 

直接将源位图拷贝到目的设备上。 

SRCAND

src AND dest

将目标文件中对应于源文件黑色区域的部分变黑,将对应于白色区域的部分留着不动。

SRCINVERT

src XOR dest

将源插入到目标。二次使用时,将目标恢复到它原来的状态。在某种条件下可以代替SRCPAINT 操作。

SRCPAINT

src OR dest

将源文件中的白色区域刷到目标文件中。源中的黑色区域不转换到目标中。

 

  那里补充表明某些,彰显位图的背景颜色可以通过PhotoShop等图像处理软件获取,当然,也可以经过读取位图上出色职位上的像素点的颜色来赢得,前者实现起来相比方便,后者稍微麻烦一些,这可以依据个人爱好自由采取。

 


  相信我们在很多互联网大佬的采集中都听到过,坚定不移。这五个字看起来实在很平平无奇,对于非创业者看起来,好像这是很容易做到的一点。绝对于他们以为的,资金,人才,大环境来说简单的多。但作为一个几家创业集团的亲历者的作者来说,坚定不移,真的很不便。困难的水准是一定的率先。

二、Delphi下的实现

procedure DrawTransBitmap(hdcDest: HDC;      // 目标DC
                    nXOriginDest,            // 目标X偏移
                    nYOriginDest,            // 目标Y偏移
                    nWidthDest,              // 目的宽度
                    nHeightDest: Integer;    // 目的中度
                    hdcSrc: HDC;             // 源DC
                    nXOriginSrc,             // 源X起点
                    nYOriginSrc: Integer;    // 源Y起点
                    crTransparent: TColor    // 透明色
                    );
var
  hOldImageBMP, hImageBMP, hOldMaskBMP, hMaskBMP: HBITMAP;
  hImageDC, hMaskDC: HDC;
begin
    hImageBMP := CreateCompatibleBitmap(hdcDest, nWidthDest,
nHeightDest);    // 创造兼容位图
    hMaskBMP := CreateBitmap(nWidthDest, nHeightDest, 1, 1, NIL);      
     // 创制单色掩码位图
    hImageDC := CreateCompatibleDC(hdcDest);//临时DC
    hMaskDC := CreateCompatibleDC(hdcDest);//临时掩码DC
    hOldImageBMP := SelectObject(hImageDC, hImageBMP);
    hOldMaskBMP := SelectObject(hMaskDC, hMaskBMP);

    // 将源DC中的位图拷贝到临时DC中,源DC已经载入位图
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc,
nYOriginSrc, SRCCOPY);

    // 设置临时DC的透明色
    SetBkColor(hImageDC, crTransparent);

    // 生成透亮区域为白色,其它区域为粉红色的暂时掩码DC的掩码位图
    // 位图来自临时DC
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0,
SRCCOPY);

    // 生成透亮区域为褐色,另外区域保持不变的位图
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0,
SRCAND);

    // 透明部分保障屏幕不变,另外一些改为藏黑色
    SetBkColor(hdcDest,RGB(255,255,255));
    SetTextColor(hdcDest,RGB(0,0,0));
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hMaskDC, 0, 0, SRCAND);

    // “或”运算,生成最后效果
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hImageDC, 0, 0, SRCPAINT);

    // 清理、恢复
    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC, hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP);
end;


看一下Delphi自己的包裹

procedure TForm1.btn1Click(Sender: TObject);

var

  Bitmap : TBitMap;
begin
  Bitmap := TBitmap.Create;
  Bitmap.Width := 200;
  Bitmap.Height := 180;
  try
    with Bitmap do begin
      Bitmap.Canvas.Rectangle(0, 0,   Bitmap.Width, Bitmap.Height);
      Transparent := True;
      TransParentColor := clwhite;
      Form1.Canvas.Draw(0,0,BitMap);
    end;
  finally
    Bitmap.Free;

  end;


  假诺说对于坚持不渝这多少个概念我们还尚未直接的询问的话,直接给我们举个例子:在一家稳定的大公司,BAT.这类型的,尽管有一天你的领导人士跟你说,小陈,那些月公司有困难,这些月你就不拿工资了呢。你会答应么?相信任何在大商店做事过的人都不会答应,更有甚者,集团每月10日发工钱的,晚了个两三天,就即将跟财务探究一番的态度。这就是打工精神,拿多少钱,干多少事,而且只可同甘,不曾共苦。

三、VC下的兑现

在支付界面及棋牌游戏经过中,需要过多镂空的图形,而且图片形式一般相比较固定.
据此封装了两种普遍的镂空方法.

  1. 用以没有掩码图,只有指定透明色,不举行伸缩
    void DrawTransBitmap( HDC hdcDest,             // 目标DC
                          int nXOriginDest,        // 目标X偏移
                          int nYOriginDest,        // 目标Y偏移
                          int nWidthDest,          // 目的宽度
                          int nHeightDest,         // 目的低度
                          HDC hdcSrc,              // 源DC
                          int nXOriginSrc,         // 源X起点
                          int nYOriginSrc,         // 源Y起点
                          COLORREF crTransparent   // 透明色,COLORREF类型
                        );
  1. 用于没有掩码图,只有指定透明色,可以拓展伸缩
     void DrawTransBitmap( HDC hdcDest,       // 目标DC
                                                 int nXOriginDest,   //
    目标X偏移
                                                 int nYOriginDest,   //
    目标Y偏移
                                                 int nWidthDest,      //
    目的宽度
                                                 int nHeightDest,    //
    目标中度
                                                 HDC hdcSrc,          //
    源DC
                                                 int nXOriginSrc,     //
    源X起点
                                                 int nYOriginSrc,     //
    源Y起点
                                                 int nWidthSrc,        //
    源宽度
                                                 int nHeightSrc,      //
    源高度
                                                 COLORREF crTransparent  //
    透明色,COLORREF类型
          );

3.指定掩码图,和掩码图属于不同图片
 void DrawTransBitmap( HDC hdcDest,        // 目标DC
                                             int nXOriginDest,    //
目标X偏移
                                             int nYOriginDest,    //
目标Y偏移
                                             int nWidthDest,       //
目的宽度
                                             int nHeightDest,     //
目的中度
                                             HDC hdcSrc,          //
源DC
                                             HDC hdcMask,      
//掩码DC
                                             int nXOriginSrc,     //
源X起点
                                             int nYOriginSrc,     //
源Y起点
                                            COLORREF crTransparent  //
透明色,COLORREF类型
                                          );

4.点名图片和掩码图同属于一张图片
void DrawTransBitmap(HDC hDC, 
                                           int nPosX, 
                                           int nPosY,
                                           int nCX, 
                                           int nCY, 
                                           HBITMAP hObj
                                           );

5.拿到位图HRGN
   HRGN CreateBitmapRgn(int nWidth,int nHeight,HBITMAP hbmp,COLORREF
cTrans);

以下是共同体代码
//用于没有掩码图,只有指定透明色,不开展伸缩
//方法一:
void DrawTransBitmap( HDC hdcDest,      // 目标DC
                    int nXOriginDest,   // 目标X偏移
                    int nYOriginDest,   // 目标Y偏移
                    int nWidthDest,     // 目的宽度
                    int nHeightDest,    // 目的低度
                    HDC hdcSrc,         // 源DC
                    int nXOriginSrc,    // 源X起点
                    int nYOriginSrc,    // 源Y起点
                    COLORREF crTransparent  // 透明色,COLORREF类型
                    )
{
    HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest,
nWidthDest, nHeightDest);    // 创造兼容位图
    HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest,
nHeightDest, 1, 1, NULL);            // 创制单色掩码位图
    HDC        hImageDC = CreateCompatibleDC(hdcDest);//临时DC 
    HDC        hMaskDC = CreateCompatibleDC(hdcDest);//临时掩码DC 
    hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
    hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);

    // 将源DC中的位图拷贝到临时DC中,源DC已经载入位图
     BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc,
nXOriginSrc, nYOriginSrc, SRCCOPY);
 
    // 设置临时DC的透明色
    SetBkColor(hImageDC, crTransparent);

    // 生成透亮区域为白色,另外区域为紫色的暂时掩码DC的掩码位图
    // 位图来自临时DC
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0,
SRCCOPY);

    // 生成透亮区域为褐色,此外区域保持不变的位图
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0,
SRCAND);

    // 透明部分保障屏幕不变,另外一些改为肉色
    SetBkColor(hdcDest,RGB(255,255,255));
    SetTextColor(hdcDest,RGB(0,0,0));
     BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest,
nHeightDest, hMaskDC, 0, 0, SRCAND);

    // “或”运算,生成最后效果
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hImageDC, 0, 0, SRCPAINT);

    // 清理、恢复    
    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC, hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP);
}

//用于没有掩码图,只有指定透明色,不开展伸缩
//方法二:
void DrawTransBitmap( HDC hdcDest,      // 目标DC
                    int nXOriginDest,   // 目标X偏移
                    int nYOriginDest,   // 目标Y偏移
                    int nWidthDest,     // 目的宽度
                    int nHeightDest,    // 目的中度
                    HDC hdcSrc,         // 源DC
                    int nXOriginSrc,    // 源X起点
                    int nYOriginSrc,    // 源Y起点
                    COLORREF crTransparent  // 透明色,COLORREF类型
                    )
{
    HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest,
nWidthDest, nHeightDest);    // 成立兼容位图
    HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest,
nHeightDest, 1, 1, NULL);            // 创造单色掩码位图
    HDC        hImageDC = CreateCompatibleDC(hdcDest);//临时DC 
    HDC        hMaskDC = CreateCompatibleDC(hdcDest);//临时掩码DC 
    hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
    hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);

    // 将源DC中的位图拷贝到临时DC中,源DC已经载入位图
     BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc,
nXOriginSrc, nYOriginSrc, SRCCOPY);
 
    // 设置临时DC的透明色
    SetBkColor(hImageDC, crTransparent);

    // 生成透亮区域为白色,此外区域为粉色的暂时掩码DC的掩码位图
    // 位图来自临时DC
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0,
SRCCOPY);

            
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hImageDC, 0, 0, SRCINVERT);
         
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hMaskDC, 0, 0, SRCAND);

    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hImageDC, 0, 0, SRCINVERT);
    // 清理、恢复    
    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC, hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP);
}

//用于没有掩码图,唯有指定透明色,可以拓展伸缩
//方法一:
void DrawTransBitmap( HDC hdcDest,      // 目标DC
                     int nXOriginDest,   // 目标X偏移
                     int nYOriginDest,   // 目标Y偏移
                     int nWidthDest,     // 目的宽度
                     int nHeightDest,    // 目的低度
                     HDC hdcSrc,         // 源DC
                     int nXOriginSrc,    // 源X起点
                     int nYOriginSrc,    // 源Y起点
                     int nWidthSrc,      // 源宽度
                     int nHeightSrc,     // 源高度
                     COLORREF crTransparent  // 透明色,COLORREF类型
                     )
{
    HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest,
nWidthDest, nHeightDest);    // 创立包容位图
    HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest,
nHeightDest, 1, 1, NULL);            // 创制单色掩码位图
    HDC        hImageDC = CreateCompatibleDC(hdcDest);
    HDC        hMaskDC = CreateCompatibleDC(hdcDest);
    hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
    hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);
    
    // 将源DC中的位图拷贝到临时DC中
    if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
    {
        BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc,
nXOriginSrc, nYOriginSrc, SRCCOPY);
    }
    else
    {
        StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, 
        hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc,
SRCCOPY);
    }
    
    // 设置透明色
    SetBkColor(hImageDC, crTransparent);

    // 生成透亮区域为白色,另外区域为粉黑色的掩码位图
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0,
SRCCOPY);
    
    // 生成透亮区域为黑色,另外区域保持不变的位图
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0,
SRCAND);

    // 透明部分保障屏幕不变,此外一些改为黑色
    SetBkColor(hdcDest,RGB(0xff,0xff,0xff));
    SetTextColor(hdcDest,RGB(0,0,0));
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hMaskDC, 0, 0, SRCAND);
    
    // “或”运算,生成最后效果
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hImageDC, 0, 0, SRCPAINT);
    
    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC, hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP);
    
}

//用于没有掩码图,只有指定透明色,可以举行伸缩
  //方法二:
void DrawTransBitmap( HDC hdcDest,      // 目标DC
                     int nXOriginDest,   // 目标X偏移
                     int nYOriginDest,   // 目标Y偏移
                     int nWidthDest,     // 目的宽度
                     int nHeightDest,    // 目的中度
                     HDC hdcSrc,         // 源DC
                     int nXOriginSrc,    // 源X起点
                     int nYOriginSrc,    // 源Y起点
                     int nWidthSrc,      // 源宽度
                     int nHeightSrc,     // 源高度
                     COLORREF crTransparent  // 透明色,COLORREF类型
                     )
{
  
      if (nWidthDest < 1) return false;
      if (nWidthSrc < 1) return false;
      if (nHeightDest < 1) return false;
      if (nHeightSrc < 1) return false;
      HDC dc = CreateCompatibleDC(NULL);
      HBITMAP bitmap = CreateBitmap(nWidthSrc, nHeightSrc, 1,
GetDeviceCaps(dc,
      BITSPIXEL), NULL);
      if (bitmap == NULL)
       {
                DeleteDC(dc);    
                return false;
        }
     
    HBITMAP oldBitmap = (HBITMAP)SelectObject(dc, bitmap);
    if (!BitBlt(dc, 0, 0, nWidthSrc, nHeightSrc, dcSrc, nXOriginSrc,
                     nYOriginSrc, SRCCOPY))
    {
               SelectObject(dc, oldBitmap); 
               DeleteObject(bitmap);        
         DeleteDC(dc);                
         return false;
    }
       
    HDC maskDC = CreateCompatibleDC(NULL);
     HBITMAP maskBitmap = CreateBitmap(nWidthSrc, nHeightSrc, 1, 1,
NULL);
 if (maskBitmap == NULL)
      {
          SelectObject(dc, oldBitmap); 
           DeleteObject(bitmap);        
           DeleteDC(dc);                
           DeleteDC(maskDC);            
           return false;
       }
       HBITMAP oldMask =  (HBITMAP)SelectObject(maskDC, maskBitmap);
       SetBkColor(maskDC, RGB(0,0,0));
       SetTextColor(maskDC, RGB(255,255,255));
  if (!BitBlt(maskDC, 0,0,nWidthSrc,nHeightSrc,NULL,0,0,BLACKNESS))
       {
              SelectObject(maskDC, oldMask); 
              DeleteObject(maskBitmap);      
              DeleteDC(maskDC);              
              SelectObject(dc, oldBitmap);   
              DeleteObject(bitmap);          
              DeleteDC(dc);                  
              return false;
       }
       SetBkColor(dc, crTransparent);
       BitBlt(maskDC, 0,0,nWidthSrc,nHeightSrc,dc,0,0,SRCINVERT);
      SetBkColor(dc, RGB(0,0,0));
       SetTextColor(dc, RGB(255,255,255));
       BitBlt(dc, 0,0,nWidthSrc,nHeightSrc,maskDC,0,0,SRCAND);
       HDC newMaskDC = CreateCompatibleDC(NULL);
       HBITMAP newMask;
       newMask = CreateBitmap(nWidthDest, nHeightDest, 1,
                                                 
GetDeviceCaps(newMaskDC, BITSPIXEL), NULL);
  if (newMask == NULL)
       {
              SelectObject(dc, oldBitmap);
              DeleteDC(dc);
              SelectObject(maskDC, oldMask);
              DeleteDC(maskDC);
              DeleteDC(newMaskDC);
              DeleteObject(bitmap);     
              DeleteObject(maskBitmap); 
              return false;
       }
       SetStretchBltMode(newMaskDC, COLORONCOLOR);
       HBITMAP oldNewMask = (HBITMAP) SelectObject(newMaskDC,
newMask);
       StretchBlt(newMaskDC, 0, 0, nWidthDest, nHeightDest, maskDC, 0,
0,
                    nWidthSrc, nHeightSrc, SRCCOPY);
       SelectObject(maskDC, oldMask);
       DeleteDC(maskDC);
       DeleteObject(maskBitmap); 
       HDC newImageDC = CreateCompatibleDC(NULL);
       HBITMAP newImage = CreateBitmap(nWidthDest, nHeightDest, 1,
        GetDeviceCaps(newMaskDC, BITSPIXEL), NULL);
  if (newImage == NULL)
       {
              SelectObject(dc, oldBitmap);
              DeleteDC(dc);
              DeleteDC(newMaskDC);
              DeleteObject(bitmap);     
              return false;
       }
       HBITMAP oldNewImage = (HBITMAP)SelectObject(newImageDC,
newImage);
       StretchBlt(newImageDC, 0, 0, nWidthDest, nHeightDest, dc, 0, 0,
nWidthSrc,
              nHeightSrc, SRCCOPY);
       SelectObject(dc, oldBitmap);
       DeleteDC(dc);
       DeleteObject(bitmap);     
       BitBlt( dcDest, nXOriginDest, nYOriginDest, nWidthDest,
nHeightDest,
                          newMaskDC, 0, 0, SRCAND);
       BitBlt( dcDest, nXOriginDest, nYOriginDest, nWidthDest,
nHeightDest,
                       newImageDC, 0, 0, SRCPAINT);
       SelectObject(newImageDC, oldNewImage);
       DeleteDC(newImageDC);
       SelectObject(newMaskDC, oldNewMask);
       DeleteDC(newMaskDC);
       DeleteObject(newImage);   
       DeleteObject(newMask);    
       return true;
}

点名掩码图,和掩码图属于不同图片
void DrawTransBitmap( HDC hdcDest,      // 目标DC
                    int nXOriginDest,   // 目标X偏移
                    int nYOriginDest,   // 目标Y偏移
                    int nWidthDest,     // 目的宽度
                    int nHeightDest,    // 目的高度
                    HDC hdcSrc,         // 源DC
                    HDC hdcMask,
                    int nXOriginSrc,    // 源X起点
                    int nYOriginSrc,    // 源Y起点
                    COLORREF crTransparent  // 透明色,COLORREF类型
                    )
{

    HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest,
nWidthDest, nHeightDest);    // 创造兼容位图
     HDC        hImageDC = CreateCompatibleDC(hdcDest);//临时DC 
     hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
 
    // 将源DC中的位图拷贝到临时DC中,源DC已经载入位图
     BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc,
nXOriginSrc, nYOriginSrc, SRCCOPY);
     // 设置临时DC的透明色
    SetBkColor(hImageDC, crTransparent);
    // 生成透亮区域为肉色,其余区域保持不变的位图
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcMask, 0, 0,
SRCAND);
    // 透明部分保障屏幕不变,另外一些改为绿色
    SetBkColor(hdcDest,RGB(255,255,255));
    SetTextColor(hdcDest,RGB(0,0,0));
     BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest,
nHeightDest, hdcMask, 0, 0, SRCAND);
     // “或”运算,生成最后效果
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hImageDC, 0, 0, SRCPAINT);
    // 清理、恢复    
    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    DeleteObject(hImageBMP);
}

点名图片和掩码图同属于一张图纸
void DrawTransBitmap(HDC hDC, int nPosX, int nPosY, int nCX, int nCY,
HBITMAP hObj)
{
    HDC hMemDC= CreateCompatibleDC(hDC);
    HBITMAP hOldBMP=(HBITMAP)::SelectObject(hMemDC,hObj);
      BitBlt(hDC,nPosX,nPosY,nCX,nCY,    hMemDC,nCX,0,SRCAND);
    BitBlt(hDC,nPosX,nPosY,nCX,nCY,    hMemDC,0,0,SRCPAINT);
    SelectObject(hMemDC,hOldBMP);
    DeleteDC(hMemDC);

HRGN CreateBitmapRgn(int nWidth,int nHeight,HBITMAP hbmp, COLORREF
TransColor)
{
        HDC  hmemDC;
        //创立与传播DC兼容的暂时DC
        hmemDC = ::CreateCompatibleDC(NULL);        
        HBITMAP hOldBmp = (HBITMAP)::SelectObject(hmemDC,hbmp);
                
        //创造总的窗体区域,开端region为0
        HRGN hrgn;
        hrgn = ::CreateRectRgn(0,0,0,0);           
        
        int y;
        for(y=0;y<nHeight ;y++)
        {
            HRGN rgnTemp; //保存临时region
            
            int iX = 0;
            do
            {
                //跳过透明色找到下一个非透明色的点.
                while (iX < nWidth  && ::GetPixel(hmemDC,iX, y) ==
TransColor)
                    iX++;
                
                //记住这多少个开端点
                int iLeftX = iX;
                
                //寻找下个透明色的点
                while (iX < nWidth  && ::GetPixel(hmemDC,iX, y) !=
TransColor)
                    ++iX;
                
                //创造一个分包起源与根本间高为1像素的临时“region”
                rgnTemp=::CreateRectRgn(iLeftX, y, iX, y+1);
                
                //合并到主”region”.
                CombineRgn( hrgn,hrgn,rgnTemp, RGN_OR);
                
                //删除临时”region”,否则下次创办时和失误
                ::DeleteObject(rgnTemp);
            }while(iX <nWidth );
            iX = 0;
        }
        ::SelectObject(hmemDC,hOldBmp);

http://blog.csdn.net/shuaihj/article/details/8551322

  而创业企业则是万分的简易粗暴,创业公司COO(整个集团就10私房)跟你说,小陈,这个月不太行,顶一顶,下个月一起发行不。小陈,“没问题,我了解。”一句我通晓,就是这个百折不回最直接的表明,创业公司的负责人和员工组成一个强劲的利益共同体,而不是各怀异心,为了达成这么些想得很美的对象,一个月不拿工资,四个月,六个月,半年。为了一份没有上市,没有盈利一样一纸空文的股权而极力,这就是创业者的饱满,那份百折不挠,才是“中国互联网创业,做如何都能打响。”的神气所在,建立在这上边,布满了许多劳累,痛苦,难以言表。

  

  “所谓的蓝海市场,根本不存在,更多的是做而不专的商海。”—做巨头不屑的事

  

  在中华的互联网,是不设有蓝海的,在大家看来的情景下,大商店的布局是数的清的。可是在大家看不到的场馆下,大商厦的类型或者有几十个,甚至是几百个。里面覆盖了市面上个林林总总,甚至足以说,几乎所有项目在大公司里面都有雏形,只可是这多少个小圈子是不是能达标他们公司里面的确认,能否成为战略点,这很勤奋。

  更多时候创业者面对的是大商店做而不专的商海,大集团可以做,也想过做,可是不会投入大精力,甚至足以说对那个市场不足。最分明的例子,中华英才网,地推团队几千人,天天接触成千上万的小商店,这种体力活,可能对于大商店来说就是不太重大的一环。再者,几家婚恋公司,百合网,保养网,世纪佳缘,对于恋爱的刚需,大商家也不是不知,不过在这一个业务上投入的产出比不可能落得一个有力的增速,市场不够大,投入之后也许需要迅速的暴跌资金规模,这或多或少,大商厦也做不到。

  做而不专的商海有过多浩大,这也是和上文这句,做什么样都能得逞相对应,很多“准创业者”总是想像乔布斯一样,想出一个可以得以改变世界的idea,在准创业的过程中,甚至耗费了许多金钱,时间在追究这么些无懈可击的idea上边,然而她依旧没有踏出这一步。当有一天他确实想到了友好心中中的这些idea的时候,已经迟了每户一大步。创业需要的更多是出生,而不是幻想。各位准创业者,不要再想怎么蓝海市场了,沉下心来先干呢。

  “成功的创业者,都不是一步到位,而是在创业历程中的不断试错,实践。”

  —中国太多的准创业者

  现在中国互联网创业大潮中,更多的是“准创业者”而不是创业者。“准创业者”的表征是,害怕败北;理想丰满;知行不合一;道听途说;每日都有一个新想法;有一份不错的做事;没有冒险精神。如若您有内部一项特征,很对不起的报告您,其实您不太符合成为一名真正的创业者。

  你或许永远都只是一名“准创业者”,一直想着把创业作为一个兼顾,而暂缓不肯下决心把团结现有的生活给颠覆掉,把团结从一个每日按点上下班,领工钱的打工认识,变成一个三餐不定,上下班时间不定,收入支出不知的创业者。试问连友好的生存都不敢去颠覆,谈怎么着颠覆互联网,颠覆传统行业,颠覆整个世界呢?

  成功的创业者更多的是,当他内心有一个小想法的时候,他已经起首做了,无论是在线旅游,车联网,手游或者是做软件外包,设计外包,甚至是修补手机。这都能成为他们创业的一个点,而不是动不动嚷嚷自己是微信第二,Tmall第二,京东第二,酷派第二这种不靠谱的空喊,在大团结踏实的节拍上,以最初的对象作为切入点,创业历程中不停的试错—实践—修正—试错—实践—修正。做一个良性的巡回,而这所有在互联网创业家中显示的淋漓。

  奇虎的周鸿祎从雅虎出来,如故想做一个查找社区,还包括像前几天百度百科一样的问答式搜索,可是在创业探索过程中,以一个查杀流氓软件插件作为切入点,改变路径,以免费杀毒间接颠覆了这些几十亿价值的“收费杀毒”市场,也化为了BAT之外最具影响力的互联网商家之一。

  久邦数码的张向东,从3G门户(WAP网站),到“手机心脏”(塞班系统的手机软件)再到“GO桌面”(安卓端的APP),当年作者学生时期,3G门户寓目火箭图文比赛的百万用户在线,但也不许给久邦数码带来太大的功利,直到GO桌面,在试错,走过弯路将来,以一款拔取从远方开首,终于成功上市。

  博大精深相互的张伟,死磕腾讯坚韧不拔做了聊天室7年,最后转身投向棋牌游戏的胸怀,坚持不渝七年的东西,哪个人又能轻易做到放弃,可是团队还在,大家信心一致,再度转移战场,从facebook的第一转回来国内移动端棋牌游戏的不胜,最终实现香江上市。

  说这五个例证并不是告诉大家,创业最后上市了才是水到渠成,而是这几个例证在试错—实践—修正—试错—实践—修正这么些路子中更有着代表性,我想和这位天使朋友一块发布一点,创业的中标,是否上市平素不是正式。成功有实绩,也有小成,当一家创业集团每月的创收达到200万的时候,在本人的通晓里,他们10几人协会,已经收获充裕滋润,养活自己,并有结余的基金,能做一些进一步不同的翻新,这也是创业集团成功的一种。任何成功的创业集团,都在转移中成功,你不变,在这些新闻万变的互联网,已经落后了重重。

  结语:在本人解读完天使的这几番话未来,相信广大准创业者特需雅观的思考的和睦的出路了,你们真的不吻合创业,即使“流血创业”也不会中标。相反,那么些满意上述严酷条件的创业者,如果现在时期的紧巴巴,请坚持不渝下去,你们会是将来互联网的骨干势力。

  在篇章最终的末梢,给我的天使投资好对象打个广告,假若有好的品类,欢迎砸过来。加我微信公众号联系即可:huangjianming026

  我的村办微信号:iamdaote。欢迎添加。喜欢这篇作品?猛戳右下方【+订阅】我的天涯论坛自媒体刊物吧:)

http://it.sohu.com/20140425/n398821701.shtml

发表评论

电子邮件地址不会被公开。 必填项已用*标注