关于DIB封装类

时间:2021-06-13 15:45:11
 最近帮老师弄一个图像处理的程序,从网上下载了封装的Cdib类之后,发现许多错误,其中有几处连接时的错误始终解决不了。下面就是该问题:
  在Dib.h中定义了这么一个函数:// 从DDB中创建DIB,实现DDB到DIB的转换
bool ConvertFromDDB(HBITMAP hBitmap, HPALETTE hPal);
而在Dib.cpp中该函数的实现时,有这么一句代码:if(hPal==NULL){
hPal = GetSystemPalette();
}
   但是在Dib.h中根本没有定义GetSystemPalette()函数,该函数的定义是在GlobalApi.h中定义的,问题之一就是GlobalApiz只有.h文件,没有.cpp文件。GlobalApi.h定义如下:
#ifndef _GLOBAL_API  #define _GLOBAL_API
#include<math.h>
#include"dib.h"
#include<complex>
using namespace std;
{    ........
HPALETTE GetSystemPalette();
........}
运行连接时就报错:1>dib.obj : error LNK2019: 无法解析的外部符号 "struct HPALETTE__ * __cdecl DIB::GetSystemPalette(void)" (?GetSystemPalette@DIB@@YAPAUHPALETTE__@@XZ),该符号在函数 "public: bool __thiscall DIB::CDib::ConvertFromDDB(struct HBITMAP__ *,struct HPALETTE__ *)" (?ConvertFromDDB@CDib@DIB@@QAE_NPAUHBITMAP__@@PAUHPALETTE__@@@Z) 中被引用
恳请各路高手帮忙!!!非常感谢!

7 个解决方案

#1


应该有lib文件吧!
将这个lib文件加上

#2



/************************************************************************* 

* GetSystemPalette() 

* Parameters: 

* None 

* Return Value: 

* HPALETTE         - handle to a copy of the current system palette 

* Description: 

* This function returns a handle to a palette which represents the system 
* palette.  The system RGB values are copied into our logical palette using 
* the GetSystemPaletteEntries function.   

************************************************************************/ 
HPALETTE GetSystemPalette(void) 

HDC hDC;                // handle to a DC 
static HPALETTE hPal = NULL;   // handle to a palette 
HANDLE hLogPal;         // handle to a logical palette 
LPLOGPALETTE lpLogPal;  // pointer to a logical palette 
int nColors;            // number of colors 

// Find out how many palette entries we want. 

hDC = GetDC(NULL); 

if (!hDC) 
return NULL; 

nColors = PalEntriesOnDevice(hDC);   // Number of palette entries 

// Allocate room for the palette and lock it. 

hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + nColors * 
sizeof(PALETTEENTRY)); 

// if we didn't get a logical palette, return NULL 

if (!hLogPal) 
return NULL; 

// get a pointer to the logical palette 

lpLogPal = (LPLOGPALETTE)GlobalLock(hLogPal); 

// set some important fields 

lpLogPal->palVersion = PALVERSION; 
lpLogPal->palNumEntries = nColors; 

// Copy the current system palette into our logical palette 

GetSystemPaletteEntries(hDC, 0, nColors, 
(LPPALETTEENTRY)(lpLogPal->palPalEntry)); 

// Go ahead and create the palette.  Once it's created, 
// we no longer need the LOGPALETTE, so free it.     

hPal = CreatePalette(lpLogPal); 

// clean up 

GlobalUnlock(hLogPal); 
GlobalFree(hLogPal); 
ReleaseDC(NULL, hDC); 

return hPal; 


#3


网卡有不少CDib的版本,你找到的可能不全

#4


引用 3 楼 wqvbjhc 的回复:
网卡有不少CDib的版本,你找到的可能不全

改正:网上有不少CDib的版本,你找到的可能不全

#5


2楼的高手,我把代码重新封装整理过之后,又出现了的一个问题:error LNK2019: 无法解析的外部符号 "int __cdecl DIB::PalEntriesOnDevice(struct HDC__ *)" (?PalEntriesOnDevice@DIB@@YAHPAUHDC__@@@Z),该符号在函数 "public: struct HPALETTE__ * __thiscall DIB::CDib::GetSystemPalette(void)" (?GetSystemPalette@CDib@DIB@@QAEPAUHPALETTE__@@XZ) 中被引用
1>.\Debug/DIBImage2.exe : fatal error LNK1120: 1 个无法解析的外部命令。
可能,真的少了lib文件。
我的代码包含的头文件是:#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
#include "process.h"

#include "dib.h"
#include "GlobalApi.h"
不知道少了那个文件?麻烦各位了!!!!

#6


怎么没人理我,再次恳求帮助!!

#7




时隔两年后我看到楼主的帖子  不知道楼主现在还在做这方面吗  我遇到一些问题  希望能请教下楼主qq531858519







引用楼主 wwy_19890301 的回复:
最近帮老师弄一个图像处理的程序,从网上下载了封装的Cdib类之后,发现许多错误,其中有几处连接时的错误始终解决不了。下面就是该问题:
  在Dib.h中定义了这么一个函数:// 从DDB中创建DIB,实现DDB到DIB的转换
bool ConvertFromDDB(HBITMAP hBitmap, HPALETTE hPal);
而在Dib.cpp中该函数的实现时,有这么一句代码:if(hP……

#1


应该有lib文件吧!
将这个lib文件加上

#2



/************************************************************************* 

* GetSystemPalette() 

* Parameters: 

* None 

* Return Value: 

* HPALETTE         - handle to a copy of the current system palette 

* Description: 

* This function returns a handle to a palette which represents the system 
* palette.  The system RGB values are copied into our logical palette using 
* the GetSystemPaletteEntries function.   

************************************************************************/ 
HPALETTE GetSystemPalette(void) 

HDC hDC;                // handle to a DC 
static HPALETTE hPal = NULL;   // handle to a palette 
HANDLE hLogPal;         // handle to a logical palette 
LPLOGPALETTE lpLogPal;  // pointer to a logical palette 
int nColors;            // number of colors 

// Find out how many palette entries we want. 

hDC = GetDC(NULL); 

if (!hDC) 
return NULL; 

nColors = PalEntriesOnDevice(hDC);   // Number of palette entries 

// Allocate room for the palette and lock it. 

hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + nColors * 
sizeof(PALETTEENTRY)); 

// if we didn't get a logical palette, return NULL 

if (!hLogPal) 
return NULL; 

// get a pointer to the logical palette 

lpLogPal = (LPLOGPALETTE)GlobalLock(hLogPal); 

// set some important fields 

lpLogPal->palVersion = PALVERSION; 
lpLogPal->palNumEntries = nColors; 

// Copy the current system palette into our logical palette 

GetSystemPaletteEntries(hDC, 0, nColors, 
(LPPALETTEENTRY)(lpLogPal->palPalEntry)); 

// Go ahead and create the palette.  Once it's created, 
// we no longer need the LOGPALETTE, so free it.     

hPal = CreatePalette(lpLogPal); 

// clean up 

GlobalUnlock(hLogPal); 
GlobalFree(hLogPal); 
ReleaseDC(NULL, hDC); 

return hPal; 


#3


网卡有不少CDib的版本,你找到的可能不全

#4


引用 3 楼 wqvbjhc 的回复:
网卡有不少CDib的版本,你找到的可能不全

改正:网上有不少CDib的版本,你找到的可能不全

#5


2楼的高手,我把代码重新封装整理过之后,又出现了的一个问题:error LNK2019: 无法解析的外部符号 "int __cdecl DIB::PalEntriesOnDevice(struct HDC__ *)" (?PalEntriesOnDevice@DIB@@YAHPAUHDC__@@@Z),该符号在函数 "public: struct HPALETTE__ * __thiscall DIB::CDib::GetSystemPalette(void)" (?GetSystemPalette@CDib@DIB@@QAEPAUHPALETTE__@@XZ) 中被引用
1>.\Debug/DIBImage2.exe : fatal error LNK1120: 1 个无法解析的外部命令。
可能,真的少了lib文件。
我的代码包含的头文件是:#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
#include "process.h"

#include "dib.h"
#include "GlobalApi.h"
不知道少了那个文件?麻烦各位了!!!!

#6


怎么没人理我,再次恳求帮助!!

#7




时隔两年后我看到楼主的帖子  不知道楼主现在还在做这方面吗  我遇到一些问题  希望能请教下楼主qq531858519







引用楼主 wwy_19890301 的回复:
最近帮老师弄一个图像处理的程序,从网上下载了封装的Cdib类之后,发现许多错误,其中有几处连接时的错误始终解决不了。下面就是该问题:
  在Dib.h中定义了这么一个函数:// 从DDB中创建DIB,实现DDB到DIB的转换
bool ConvertFromDDB(HBITMAP hBitmap, HPALETTE hPal);
而在Dib.cpp中该函数的实现时,有这么一句代码:if(hP……