将图象列表转换成设备无关位图

原创 2001年05月12日 04:33:00
       在我的PrintTree例子中,我想打印彩色的树控制.对于文本很容易,但是图标就
不简单了.我试着将图象列表转换成DIB,但是我真正需要的是一个方法,能够取出一
个ICON的DIB,而不是整个图象列表。下面就是我使用的具体方法:

HANDLE CAdvancedTreeCtrl::ImageToDIB( CImageList* pImageList, int iImageNumber, CWnd* pWnd, BOOL bOverlay, HTREEITEM actualItem )
{
    // Local Variables
    CBitmap bitmap;
    CWindowDC dc( pWnd );

    CDC memDC;
    CRect rect;
    CPalette    pal;
    IMAGEINFO   imageInfo;

    if( FALSE == pImageList->GetImageInfo( iImageNumber, &imageInfo ) )
    {
        // Getting of the Imageinfos failed
        return NULL;
    }

    // Create compatible stuff and select Bitmap
    if( FALSE == memDC.CreateCompatibleDC( &dc ) )
    {
        // Create failed
        return NULL;
    }

    if( FALSE == bitmap.CreateCompatibleBitmap( &dc,
                                            imageInfo.rcImage.bottom-imageInfo.rcImage.top,
                                            imageInfo.rcImage.right-imageInfo.rcImage.left ) )
    {
        // Create failed
        return NULL;
    }

    CBitmap* pOldBitmap = memDC.SelectObject( &bitmap );
    if( NULL == pOldBitmap )
    {
        // Select failed
        return NULL;
    }

    // Local Variables for Draw
    CPoint point( 0, 0);
    UINT nStyle = ILD_NORMAL;

    // Is there an Overlay
    if( TRUE == bOverlay )
    {
        TV_ITEM     tv_item;

        // Set up the Item-Struct
        tv_item.hItem       = actualItem;

        // Get the full Item-Struct
        GetItem( &tv_item );

        // Set the wanted style
        nStyle = ILD_TRANSPARENT|( tv_item.state & TVIS_OVERLAYMASK );
    }

    // Draw Image to the compatible DC
    if( FALSE == pImageList->Draw( &memDC, iImageNumber, point, nStyle ) )
    {
        // Drawing of the Image failed
        return NULL;
    }

    // Create logical palette if device support a palette
    if( dc.GetDeviceCaps( RASTERCAPS ) & RC_PALETTE )
    {
UINT        nSize   = sizeof(LOGPALETTE) + ( sizeof(PALETTEENTRY) * 256 );
LOGPALETTE* pLP     = (LOGPALETTE*)new BYTE[nSize];
pLP->palVersion     = 0x300;
pLP->palNumEntries = (unsigned short)GetSystemPaletteEntries( dc, 0, 255,
pLP->palPalEntry );

// Create the palette
pal.CreatePalette( pLP );

// Free memory
delete[] pLP;
    }

    memDC.SelectObject( pOldBitmap );

    // Convert the bitmap to a DIB
    return DDBToDIB( bitmap, BI_RGB, &pal );
}

windows程序设计学习笔记-设备无关位图

GIF,JPEG格式压缩了图像数据。DIB一般都不压缩。 Windows API直接支持DIB。 DIB提供了一个用来交换图像的文件格式。Windows应用程序用到的位图一般作为DIB,存在可执行...
  • x13262608581
  • x13262608581
  • 2016年07月08日 07:06
  • 634

与设备无关的位图一、DIB 文件格式

在上一章我们了解到Windows GDI位图对象(也称为与设备相关的位图,或DDB)有许多程序设计用途。但是我并没有展示把这些位图储存到磁盘文件或把它们加载内存的方法。这是以前在Windows中使用的...
  • www66net
  • www66net
  • 2015年02月06日 11:41
  • 1085

与设备无关的位图(DIB)

 11.4 与设备无关的位图(DIB) 的与设备无关性主要体现在以下两个方面: DIB(Device-indepentent bitmap) DIB 的颜色模式与设备无关。例如,一...
  • xinyue19840302
  • xinyue19840302
  • 2008年04月07日 18:31
  • 690

设备无关位图

直接显示时,按如下写入:(不将BMPFILEHEADER写入) m_hDIB=(HDIB)::GlobalAlloc(GHND, sizeof(BITMAPINFOHEADER)+ 1024+bmp...
  • u011584748
  • u011584748
  • 2014年03月20日 19:05
  • 379

关于“设备无关位图”!

BMP图像文件是Windows   3.X   所采用的图像文件格式,几乎所有Windows   上的应用软件都支持这种图像文件,其中最常见的就是Windows本身所附的绘图软件(Paint-Br...
  • frances_han
  • frances_han
  • 2011年11月03日 17:14
  • 2196

设备无关位图 DIB

结构体DIB文件有四个主要部分:    文件头(file hearder)    位图信息头(information header)    RGB颜色表(RGB color table),24位位图没...
  • welson80
  • welson80
  • 2010年08月29日 16:56
  • 1811

设备无关位图(DIB)

设备无关位图是Device-Independent Bitmap的缩写。它自带颜色信息。因此,调色板管理非常容易。DIB也使打印时的灰度阴影控制更加容易。任何运行Windows的计算机都可以处理DIB...
  • promaster
  • promaster
  • 2004年07月12日 09:27
  • 2202

DIB(Device-Independent Bitmap) 设备无关位图

位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。DDB位图在早期的Windows系统(Windows 3.0以前)中是很普遍的,事实上它也是唯一的。然而,随着显示器制造技术的进...
  • l12345678
  • l12345678
  • 2007年08月15日 15:27
  • 2009

BMP 设备无关位图格式

设备无关位图和BMP文件        设备无关位图(DIB)自带颜色信息。从名字就可以看出DIB是和设备无关的,任何运行Windows操作系统的计算机都可以处理DIB。DIB通常以BMP文件的形式被...
  • shimachao
  • shimachao
  • 2013年06月13日 17:29
  • 1267

Windows程序设计-设备无关位图

如果您有小型的DIB并且需要频繁地操作图素位,您可以使用SetDIBitsToDevice和StretchDIBits来显示它们。然而,对于大型的DIB,此技术会遇到显示效能的问题,尤其在8位视讯显示...
  • lilongsy
  • lilongsy
  • 2017年09月28日 14:19
  • 90
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将图象列表转换成设备无关位图
举报原因:
原因补充:

(最多只允许输入30个字)