Feeling

              三人行,必有我?guī)熝?/p>

             ::  :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評(píng)論 :: 0 Trackbacks
          關(guān)于PaletteData的生成:
          case Gdip.PixelFormat16bppARGB1555:                                        
          case Gdip.PixelFormat16bppRGB555: 
              paletteData = new PaletteData(0x7C00, 0x3E0, 0x1F); 
          break;
          case Gdip.PixelFormat16bppRGB565: 
              paletteData = new PaletteData(0xF800, 0x7E0, 0x1F); 
          break;
          case Gdip.PixelFormat24bppRGB: 
              paletteData = new PaletteData(0xFF, 0xFF00, 0xFF0000); 
          break;
          case Gdip.PixelFormat32bppRGB:
          case Gdip.PixelFormat32bppARGB: 
              paletteData = new PaletteData(0xFF00, 0xFF0000, 0xFF000000); 
          break;

          32位ImageData中的data是以RGBA的順序存儲(chǔ)的。data[0]:red,data[1]:green,data[2]:blue,data[3]:alpha

          從byte[]中讀取RGB pixel:
          public static int getPixelFromRGBA( int depth, byte[] data )
          {
                  switch ( depth )
                  {
                      case 32 :
                          return ( ( data[0] & 0xFF ) << 24 )
                                  + ( ( data[1] & 0xFF ) << 16 )
                                  + ( ( data[2] & 0xFF ) << 8 )
                                  + ( data[3] & 0xFF );
                      case 24 :
                          return ( ( data[0] & 0xFF ) << 16 )
                                  + ( ( data[1] & 0xFF ) << 8 )
                                  + ( data[2] & 0xFF );
                      case 16 :
                          return ( ( data[1] & 0xFF ) << 8 ) + ( data[0] & 0xFF );
                      case 8 :
                          return data[0] & 0xFF;
                  }
                  SWT.error( SWT.ERROR_UNSUPPORTED_DEPTH );
                  return 0;
          }

          從pixel中取出RGB值:
          RGB rgb = imagedata.palette.getRGB( pixel );

          生成一個(gè)空的32位圖片:
          ImageData dest = new ImageData( width,
                          height,
                          32,
                          new PaletteData( 0xFF00, 0xFF0000, 0xFF000000 ) );

          24位透明圖片轉(zhuǎn)成32位透明圖片:
              public static ImageData convertToRGBA( ImageData src )
              {
                  ImageData dest = new ImageData( src.width,
                          src.height,
                          32,
                          new PaletteData( 0xFF00, 0xFF0000, 0xFF000000 ) );

                  for ( int x = 0; x < src.width; x++ )
                  {
                      for ( int y = 0; y < src.height; y++ )
                      {
                          int pixel = src.getPixel( x, y );
                          RGB rgb = src.palette.getRGB( pixel );

                          byte[] rgba = new byte[4];

                          rgba[0] = (byte) rgb.red;
                          rgba[1] = (byte) rgb.green;
                          rgba[2] = (byte) rgb.blue;

                          if ( pixel == src.transparentPixel )
                          {
                              rgba[3] = (byte) ( 0 );
                          }
                          else
                          {
                              rgba[3] = (byte) ( 255 );
                          }
                          dest.setPixel( x, y, getPixelFromRGBA( 32, rgba ) );
                      }
                  }
                  return dest;
              }


          評(píng)論

          # re: SWT ImageData的一些小結(jié)[未登錄] 2013-03-16 20:51
          用 SWT 怎么創(chuàng)建一個(gè) 空的 透明的圖片?  回復(fù)  更多評(píng)論
            


          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          GitHub |  開源中國社區(qū) |  maven倉庫 |  文件格式轉(zhuǎn)換 
          主站蜘蛛池模板: 天等县| 应用必备| 威远县| 卢湾区| 米泉市| 夏河县| 广宗县| 湖南省| 扎兰屯市| 扬中市| 兴山县| 大渡口区| 彭水| 澎湖县| 台北市| 府谷县| 渭源县| 蒙山县| 罗江县| 新野县| 邳州市| 游戏| 安塞县| 巨野县| 清苑县| 巫溪县| 奉贤区| 八宿县| 天长市| 宜良县| 永嘉县| 孝昌县| 翁牛特旗| 老河口市| 泾源县| 读书| 湖州市| 靖安县| 清丰县| 广汉市| 上思县|