資源簡介
在別人的一個項目基礎上重寫的,不再使用源管理器提供的源選擇對話框和源用戶界面,自定義界面上可以選擇掃描設備,設置單雙面打印,設置黑白或者彩色打印、設置紙張大小、設置分辨率,不過自定義界面是非常粗糙的,只是提供了可以修改幾種常用參數的方法。
代碼片段和文件信息
#include?“stdafx.h“
#include?“math.h“
#include?“DIB.h“
#define?BIG_DISTANCE?10000000L
#define?DIST(r1g1b1r2g2b2)?\
????(long)?(3L*(long)((r1)-(r2))*(long)((r1)-(r2))?+?\
????4L*(long)((g1)-(g2))*(long)((g1)-(g2))?+?\
????2L*(long)((b1)-(b2))*(long)((b1)-(b2)))
static?unsigned?char?masktable[]?=?{?0x800x400x200x100x080x040x020x01?};
CDIB::CDIB(HANDLE?hDibint?nBits)
{
m_pVoid?=?NULL;
m_pLinePtr?=?NULL;
m_bUseGamma=FALSE;
width=height=0;
if(hDib)
{
CreateFromHandle(hDibnBits);
}
}
CDIB::~CDIB()
{
DestroyDIB();
}
void?CDIB::DestroyDIB()
{
if(m_pVoid)?free(m_pVoid);
m_pVoid?=?NULL;
if(m_pLinePtr)?free(m_pLinePtr);
m_pLinePtr?=?NULL;
}
BOOL?CDIB::Create(int?widthint?heightint?bits)
{
/*
Free?existing?image
*/
DestroyDIB();
// ASSERT(bits?==?24?||?bits?==?8);
BITMAPINFOHEADER?bmInfo;
memset(&bmInfo0sizeof(BITMAPINFOHEADER));
bmInfo.biSize?=?sizeof(BITMAPINFOHEADER);
bmInfo.biWidth?=?width;
bmInfo.biHeight?=?height;
bmInfo.biPlanes?=?1;
bmInfo.biBitCount?=?bits;
bmInfo.biCompression?=?BI_RGB;
return?Create(bmInfo);
}
BOOL?CDIB::Create(BITMAPINFOHEADER&?bmInfo)
{
bytes?=?(bmInfo.biBitCount*bmInfo.biWidth)>>3;
height?=?bmInfo.biHeight;
width?=?bmInfo.biWidth;
// bmInfo.biHeight?*=?-1;
while(bytes%4)?bytes++;
int?size;
size?=?sizeof(BITMAPINFOHEADER)?+?sizeof(RGBQUAD)*GetPaletteSize(bmInfo)?+?bytes*height;
m_pVoid?=?(void?*)malloc(size);
if(!m_pVoid)?return?FALSE;
m_pInfo?=?(PBITMAPINFO?)m_pVoid;
memcpy((void?*)&m_pInfo->bmiHeader(void?*)&bmInfosizeof(BITMAPINFOHEADER));
m_pRGB?=?(RGBQUAD?*)((unsigned?char?*)m_pVoid?+?sizeof(BITMAPINFOHEADER))?;
m_pBits?=?(unsigned?char?*)(m_pVoid)?+?sizeof(BITMAPINFOHEADER)?+?sizeof(RGBQUAD)*GetPaletteSize();
int?i;
BYTE?**ptr;
m_pLinePtr?=?(BYTE?**)malloc(sizeof(BYTE?*)*height);
if(!m_pLinePtr)?return?FALSE;
for(i=0ptr=m_pLinePtr;?i? {
//*ptr?=?(int)(m_pBits)+(i*bytes);
//*ptr?=?(int)GetLinePtr(i);
*ptr?=?m_pBits?+?(height-i-1)*bytes;
}
m_nFlags?=?0;
return?TRUE;
}
void?CDIB::SetPalette(unsigned?char?*palette)
{
int?isize;
RGBQUAD?*rgb;
if(!palette)?return;
size?=?GetPaletteSize();
for(i=0rgb?=?m_pRGB;?i? {
if(m_bUseGamma)
{
rgb->rgbRed?=?Gamma[palette[0]];
rgb->rgbGreen?=?Gamma[palette[1]];
rgb->rgbBlue?=?Gamma[palette[2]];
}
else
{
rgb->rgbRed?=?palette[0];
rgb->rgbGreen?=?palette[1];
rgb->rgbBlue?=?palette[2];
}
rgb->rgbReserved?=?(BYTE)0;
}
}
void?CDIB::SetPalette(RGBQUAD?*pRGB)
{
int?size;
if(!pRGB)?return;
size?=?GetPaletteSize();
memcpy(m_pRGBpRGBsize*sizeof(RGBQUAD));
}
int?CDIB::GetPaletteSize()
{
return?GetPaletteSize(m_pInfo->bmiHeader);
}
int?CDIB::GetPaletteSize(BITMAPINFOHEADER&?bmInfo)
{
switch(bmInfo.biBitCount)
{
case?1:
return?2;
case?4:
return?16;
case?8:
re
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????193536??2014-08-14?15:37??MyTwain\Debug\MyTwain.exe
?????文件????1429528??2014-08-14?15:37??MyTwain\Debug\MyTwain.ilk
?????文件????5204992??2014-08-14?15:37??MyTwain\Debug\MyTwain.pdb
?????文件???????3758??2014-08-14?15:37??MyTwain\MyTwain\Debug\cl.command.1.tlog
?????文件??????73452??2014-08-14?15:37??MyTwain\MyTwain\Debug\CL.read.1.tlog
?????文件???????4594??2014-08-14?15:37??MyTwain\MyTwain\Debug\CL.write.1.tlog
?????文件??????73420??2014-08-13?11:06??MyTwain\MyTwain\Debug\DIB.obj
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件??????????2??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件???????2100??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件???????5944??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件???????1476??2014-08-14?15:37??MyTwain\MyTwain\Debug\li
?????文件????????760??2014-08-14?15:37??MyTwain\MyTwain\Debug\mt.command.1.tlog
?????文件????????704??2014-08-14?15:37??MyTwain\MyTwain\Debug\mt.read.1.tlog
?????文件????????522??2014-08-14?15:37??MyTwain\MyTwain\Debug\mt.write.1.tlog
?????文件???????2173??2014-08-13?11:06??MyTwain\MyTwain\Debug\MyTwain.Build.CppClean.log
?????文件????????667??2014-08-13?11:06??MyTwain\MyTwain\Debug\MyTwain.exe.em
?????文件????????732??2014-08-13?11:06??MyTwain\MyTwain\Debug\MyTwain.exe.em
?????文件????????381??2014-08-14?15:37??MyTwain\MyTwain\Debug\MyTwain.exe.intermediate.manifest
?????文件?????????66??2014-08-14?15:37??MyTwain\MyTwain\Debug\MyTwain.lastbuildstate
?????文件???????4299??2014-08-14?15:37??MyTwain\MyTwain\Debug\MyTwain.log
?????文件??????51522??2014-08-14?15:35??MyTwain\MyTwain\Debug\MyTwain.obj
............此處省略50個文件信息
- 上一篇:Qt實現二值細胞圖像區域上色
- 下一篇:計算機組成原理54條Mips指令實驗
評論
共有 條評論