读取.9.png图像的黑色拉伸条

png图像中的黑色分为依据透明度不同,在有些软件里的显示时不同的,比如透明度为0的黑色(RGB为0),在Windows的图片查看器中显示的白色,而在画图软件中则显示的黑色。但透明度为255的黑色在在Windows图片查看器中显示为黑色。

在Andriod中用到的.9.png图像的四周黑色拉伸条只是简单的将其ARGB设置为oxff000000,即透明度为255的纯黑色,一圈像素的其它区域则是ox00000000,即透明度为0的纯黑色,所以在读取拉伸条的时候要考虑到透明度。

 

CImage*  m_pngTemp;

 

int iw = m_pngTemp->GetWidth();

 

//m_HorizPointList 为水平链表,记录各个拉伸条的起始点坐标

 int width = m_pngTemp->GetWidth();
 int heigh = m_pngTemp->GetHeight();

 POSITION posH =  m_HorizPointList.GetHeadPosition();
 for(int i = 1; i < width-1; i++)//图片第一行像素
 { 
  int* pucColor_pre  = reinterpret_cast<int *>(m_pngTemp->GetPixelAddress(i-1,0));
  int* pucColor_curr = reinterpret_cast<int *>(m_pngTemp->GetPixelAddress(i,0));
  int* pucColor_next = reinterpret_cast<int *>(m_pngTemp->GetPixelAddress(i+1,0));
  //选择条的黑色对应的透明度为255,其他也为黑色,但透明度为0
  //当前的黑线条只有一个像素
  if (*pucColor_curr == 0xff000000  && *pucColor_pre != 0xff000000 && *pucColor_next != 0xff000000)
  {
   m_HorizPointList.InsertAfter(posH,CPoint(i,1));
   m_HorizPointList.GetNext(posH);
   m_HorizPointList.InsertAfter(posH,CPoint(i+1,1));
   m_HorizPointList.GetNext(posH);
  }
  //当前的黑线条有多个像素,黑线条的前一个点
  else if (*pucColor_curr == 0xff000000  && *pucColor_pre != 0xff000000)
  {
   m_HorizPointList.InsertAfter(posH,CPoint(i,1 ));
   m_HorizPointList.GetNext(posH);
  }
  //黑线条的后一个点
  else if (*pucColor_curr == 0xff000000  && *pucColor_next != 0xff000000)
  {
   m_HorizPointList.InsertAfter(posH,CPoint(i+1,1 ));
   m_HorizPointList.GetNext(posH);
  }
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值