【问题标题】:Check if a pixel is transparent or NOT - Android检查像素是否透明 - Android
【发布时间】:2014-04-13 17:22:17
【问题描述】:

我有一张 PNG 图片(角落有透明像素),我正在尝试提取这些透明像素的颜色代码,我使用了一个 xxxx 网站,它让我可以选择一个像素并返回其颜色代码;

选择透明像素后,我得到: RGB代码:R:34 G:62 B:74

这不符合逻辑

我在我的 PNG 图像中使用了 BitmapDrawable // 我认为这不是一个正确的方法

位图位图 = ((BitmapDrawable)image.getDrawable()).getBitmap();

有没有办法检查一个像素是否透明?

谢谢

【问题讨论】:

    标签: android android-layout bitmap png


    【解决方案1】:
    Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
    int transparency = ((bitmap.getPixel(x,y) & 0xff000000) >> 24);
    

    transparency 将介于 0 (completely transparent) 和 255 (completely opaque) 之间。

    【讨论】:

    • 透明度变量应该取哪个值来检查图片是否透明?
    • 在答案中添加了解释。
    • @Omar_0x80 ,int 透明度从 0 到 255,0 完全透明:if(transparency == 0){ it is transparent }
    【解决方案2】:

    这种公认的方法是正确的,我认为如果使用它会更好:

    if (sourceBitmap1.getPixel(x, y) == Color.TRANSPARENT)

    【讨论】:

      【解决方案3】:

      如果你想在触摸视图时知道透明度,我正在使用下面的函数来检查触摸的像素是否透明:

      public boolean isBitmapTransparent(ImageView imageview){
          boolean isTransparent = false;
          final Bitmap bitmap = ((BitmapDrawable)imageview.getBackground()).getBitmap();
          imageview.setOnTouchListener(new OnTouchListener() {
      
              @Override
              public boolean onTouch(View v, MotionEvent event) {
      
                  int eventPadTouch = event.getAction();
      
                  switch (eventPadTouch) {
      
                  case MotionEvent.ACTION_DOWN:
                      if (event.getX()>=0 & 
                          event.getY()>=0 & 
                          event.getX()<bitmap.getWidth() & 
                          event.getY()<bitmap.getHeight()) {           
                              if (bitmap.getPixel((int)event.getX(),(int)event.getY())!=0) {
                                  //TODO pixel not transparent
                                  isTransparent = false;
                              }               
                              else{
                                  //TODO pixel transparent
                                  isTransparent = true;
                              }
                      }
                      return true;     
                  }
                  return false;
              }
          });
          return isTransparent;
      }
      

      【讨论】:

      • 抱歉,为什么对我已经在我的项目中使用的有效答案投反对票??
      • 抱歉,您的透明度检查不正确。假设你有一个像素 0x00FFFFFF,它不等于 0,但仍然是完全透明的。
      • 是的......但他们仍然试图做出一个好的答案。我认为没有理由不赞成
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2013-05-05
      • 1970-01-01
      • 2014-03-30
      • 2012-11-14
      • 1970-01-01
      相关资源
      最近更新 更多