⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pic.cpp

📁 超声影像工作站系统可与各种型号的B超、彩超连接
💻 CPP
📖 第 1 页 / 共 2 页
字号:
										tbuf,
										m_width,
										m_height,
										TRUE, 
										95);			// quality value 1-100.
		//JpegFile::VertFlipBuf(m_buf, m_width * 3, m_height);
		delete[] tbuf;
	}
	else
	{
		unsigned char *tbuf=new unsigned char[ m_width *m_height];
		memcpy(tbuf,m_buf, m_width * m_height);
		JpegFile::VertFlipBuf(tbuf, m_width , m_height);

		// save RGB packed buffer to JPG
		ok=JpegFile::GryToJpegFile(filename, 
										tbuf,
										m_width,
										m_height,
										95);			
		delete[] tbuf;
	}
	return ok;
}

void CPic::loadbmp( char *filename )
{
	if (m_buf!=NULL) {
		delete [] m_buf;
	}

	BMPFile theBmpFile;

	m_buf=theBmpFile.LoadBMP(filename, &m_width, &m_height);

	if ((m_buf==NULL) || (theBmpFile.m_errorText!="OK")) {
		AfxMessageBox(theBmpFile.m_errorText);
		m_buf=NULL;
		return;
	}

	//////////////////////
	// set up for display

	// do this before DWORD-alignment!!!
	// this works on packed (not DWORD-aligned) buffers
	// swap red and blue for display
	JpegFile::BGRFromRGB(m_buf, m_width, m_height);

	// vertical flip for display
	JpegFile::VertFlipBuf(m_buf, m_width * 3, m_height);
	m_filename=_T(filename);
	fileType = 2;
	flag = 1;//color;
}

void CPic::FindEdge()
{

}

void CPic::HFlip()
{
	JpegFile::HerzFlipBuf(m_buf,m_height,m_width,flag);
}

void CPic::RoteL()
{
	JpegFile::leftroteBuf(m_buf,&m_height,&m_width,flag);
}

void CPic::RoteR()
{
	JpegFile::rightroteBuf(m_buf,&m_height,&m_width,flag);
}

void CPic::ReLoad()
{
	if(fileType==1)
	{
		if(flag==1)
			loadjpg(m_filename.GetBuffer(256));
		else
			loadjpgGry(m_filename.GetBuffer(256));
	}
	else
	{
		loadbmp(m_filename.GetBuffer(256));
	}
}

void CPic::VertFlip()
{
	if(flag==1)
		JpegFile::VertFlipBuf(m_buf,m_width*3,m_height);
	else
		JpegFile::VertFlipBuf(m_buf,m_width,m_height);
}

void
CPic::CutBMP(CDC *theDC,int x,int y,int w,int h,int sx,int sy,int sw,int sh)
{
	if (m_buf==NULL) return;

	if (theDC!=NULL) {

		BYTE *tmp;
		// DWORD-align for display
		tmp = JpegFile::MakeDwordAlignedBuf(m_buf,
										 m_width,
										 m_height,
										 &m_widthDW,flag);

		// set up a DIB 
		BITMAPINFOHEADER bmiHeader;
		bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
		bmiHeader.biWidth = m_width;
		bmiHeader.biHeight = m_height;
		bmiHeader.biPlanes = 1;
		bmiHeader.biBitCount = 24;
		bmiHeader.biCompression = BI_RGB;
		bmiHeader.biSizeImage = 0;
		bmiHeader.biXPelsPerMeter = 0;
		bmiHeader.biYPelsPerMeter = 0;
		bmiHeader.biClrUsed = 0;
		bmiHeader.biClrImportant = 0;

		theDC->SetStretchBltMode(COLORONCOLOR);
		int lines = StretchDIBits(theDC->m_hDC,
									x, y,
									w,
									h,
									sx,sy,
									//bmiHeader.biWidth,
									//bmiHeader.biHeight,
									sw,sh,
									tmp,
									(LPBITMAPINFO)&bmiHeader,
									DIB_RGB_COLORS,
									SRCCOPY);

		delete [] tmp;

	}

}

void CPic::ChgConBri(int con,int bri)
{
	if (m_buf==NULL) return;
	//if(pbuf!=NULL) delete [] pbuf;
	long wh=m_width*m_height;
	if(flag==1) wh *= 3;
	//BYTE *pbuf=new BYTE[wh];
	int bit;
	for(long ix=0;ix<wh;ix++)
	{
		bit=m_buf[ix]+bri;
		if(bit>127) 
		{
			bit-=con;
			if(bit<127)bit=127;
		}
		else
		{
			bit+=con;
			if(bit>127)bit=127;
		}
		if(bit>255) bit=255;
		if(bit<0) bit=0;
		m_buf[ix]=bit;
	}

	//delete[] pbuf;
}
void CPic::ChgGryWinW(int left,int right)
{
	if (m_buf==NULL) return;
	//if(pbuf!=NULL) delete [] pbuf;
	long wh=m_width*m_height;
	if(flag==1) wh *= 3;
	//BYTE *pbuf=new BYTE[wh];
//	int	bit;

	for(long ix=0;ix<wh;ix++)
	{
		if(m_buf[ix]<left) 
			m_buf[ix]=0;
		else if(m_buf[ix]>right) 
			m_buf[ix]=0;
		else
			m_buf[ix]=(m_buf[ix]-left)*255/(right-left+1);
	}

}
void CPic::ChgGryWin(int left,int right)
{
	if (m_buf==NULL) return;
	//if(pbuf!=NULL) delete [] pbuf;
	long wh=m_width*m_height;
	if(flag==1) wh *= 3;
	//BYTE *pbuf=new BYTE[wh];
//	int bit;

	for(long ix=0;ix<wh;ix++)
	{
		if(m_buf[ix]<left) m_buf[ix]=0;
		if(m_buf[ix]>right) m_buf[ix]=0;
	}
}

void CPic::SetZoom( CDC* theDC,float zoompic,int w,int h)
{
	zoom	= zoompic;
	sx		= 0;
	sy		= 0;
	ddx		= (int)(m_width * zoom - w);
	ddy		= (int)(m_height * zoom - h);
	
	if	(NULL == theDC)	return;

	BYTE	*tmp	= NULL;
	// DWORD-align for display
	tmp = JpegFile::MakeDwordAlignedBuf(m_buf,
									 m_width,
									 m_height,
									 &m_widthDW,flag);

	// set up a DIB 
	/*BITMAPINFOHEADER bmiHeader;
	bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	bmiHeader.biWidth = m_width;
	bmiHeader.biHeight = m_height;
	bmiHeader.biPlanes = 1;
	bmiHeader.biBitCount = 24;
	bmiHeader.biCompression = BI_RGB;
	bmiHeader.biSizeImage = 0;
	bmiHeader.biXPelsPerMeter = 0;
	bmiHeader.biYPelsPerMeter = 0;
	bmiHeader.biClrUsed = 0;
	bmiHeader.biClrImportant = 0;*/
	BYTE *tempxx=new BYTE[sizeof(BITMAPINFOHEADER)+256*4];
	if(tempxx==NULL) {AfxMessageBox("Out of Memory!");return;}
	BITMAPINFO *BMIInfo = (BITMAPINFO *) tempxx;
	memset(BMIInfo,0,sizeof(BITMAPINFOHEADER)+256*4);
	BMIInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	BMIInfo->bmiHeader.biWidth = m_width;
	BMIInfo->bmiHeader.biHeight = m_height;
	BMIInfo->bmiHeader.biPlanes = 1;
	BMIInfo->bmiHeader.biBitCount = 8;
	BMIInfo->bmiHeader.biCompression = BI_RGB;
	BMIInfo->bmiHeader.biSizeImage = 0;
	BMIInfo->bmiHeader.biXPelsPerMeter = 0;
	BMIInfo->bmiHeader.biYPelsPerMeter = 0;
	BMIInfo->bmiHeader.biClrUsed = 0;
	BMIInfo->bmiHeader.biClrImportant = 0;

	//theDC->FillSolidRect(x,y,w,h,RGB(240,240,240));
	CPalette *oldp;

	if(flag==1)
	{
		BMIInfo->bmiHeader.biBitCount = 24;
	}
	else
	{
		BMIInfo->bmiHeader.biBitCount = 8;
		oldp = theDC->SelectPalette(pScrnPalette, FALSE);
		theDC->RealizePalette();
		theDC->SetStretchBltMode(COLORONCOLOR);
		//RGBQUAD* mtt=(RGBQUAD*)(BMIInfo->bmiColors);
		//BMIInfo->bmiColors = new RGBQUAD[256];
		for( int k = 0; k < 256; ++k){
			BMIInfo->bmiColors[k].rgbBlue = (BYTE)k;
			BMIInfo->bmiColors[k].rgbGreen = (BYTE)k;
			BMIInfo->bmiColors[k].rgbRed = (BYTE)k;
			BMIInfo->bmiColors[k].rgbReserved	= 0;
		}
	}

	theDC->FillSolidRect(0,0,w,h,RGB(240,240,240));
	
	int	bw	= (int)(m_width * zoom);
	int bh	= (int)(m_height * zoom);
	int x	= 0, y	= 0;
	int tsx, tsy;

	if(w>bw)
	{
		x+=(w-bw)/2;
		w=bw;
		tsx=sx=0;
		bw=BMIInfo->bmiHeader.biWidth;
	}
	else
	{
		if	((sx + w) > bw )	sx	= bw - w;
		tsx	= (int)(sx / zoom);
		bw	= (int)(w / zoom);
	}

	if(h>bh)
	{
		y+=(h-bh)/2;
		h=bh;
		tsy=sy=0;
		bh=BMIInfo->bmiHeader.biHeight;
	}
	else
	{
		if( (sy+h)>bh ) sy = bh -h;
		bh	= (int)(h / zoom);
		tsy	= (int)(sy / zoom);
		tsy	= BMIInfo->bmiHeader.biHeight - bh-tsy;
	}

	theDC->SetStretchBltMode(COLORONCOLOR);
	int lines = StretchDIBits(theDC->m_hDC,
								x, y,
								w,
								h,
								tsx,tsy,
								bw,
								bh,
								tmp,
								BMIInfo,
								DIB_RGB_COLORS,
								SRCCOPY);

	if	(1 != flag)
	{
		theDC->SelectPalette(oldp, FALSE);
		theDC->RealizePalette();
		theDC->SetStretchBltMode(COLORONCOLOR);
	}

	delete [] tmp;

	if	(imageID > 0)
	{
		char ids[5];

		sprintf(ids, "%d", imageID);
		theDC->SetTextColor(RGB(255, 255, 255));
		theDC->SetBkColor(RGB(0, 0, 255));
		theDC->TextOut(10, 10, ids);
		
		float	zz	= (float)(w / bw * 100);
		
		sprintf(ids, "%.0f%%", zz);
		theDC->TextOut(10, 50, ids);
	}

	delete	[]	tempxx;
}

void
CPic::CreateGry(BYTE* buf, int w, int h)
{
	if	(NULL != m_buf)		delete	[] m_buf;

	m_buf	= new	BYTE[w * h];
	memcpy(m_buf, buf, w * h);
	m_width		= w;
	m_height	= h;
	flag		= 0;
}

void
CPic::CreatePlate(int flag)
{
	int		k;
	FILE*	fp		= NULL;
	char	*fn[]	=
	{
		"blackbdy.lut",
		"cardiac.lut",
		"flow.lut",
		"ge_color.lut",
		"gold.lut",
		"hotiron.lut",
		"nih.lut",
		"nih_fire.lut",
		"nih_ice.lut",
		"Rainramp.lut",
		"spectrum.lut",
		"x_hot.lut",
		"x_rain.lut"
	};

	switch	(flag)
	{
	case 1:
		for( k=0;k<256;k++)
		{
			m_Rra[k]=k;
			m_Gra[k]=k;
			m_Bra[k]=k;
		}
		break;
	case 2:
		for( k=0;k<256;k++)
		{
			m_Rra[k]=255-k;
			m_Gra[k]=255-k;
			m_Bra[k]=255-k;
		}
		break;
	case 3:
	case 4:
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	case 10:
	case 11:
	case 12:
	case 13:
	case 14:
	case 15:
		fp	= fopen(fn[flag - 3], "rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
/*	case 4:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 5:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 6:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 7:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 8:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 9:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 10:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 11:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 12:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 13:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 14:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
	case 15:
		fp = fopen(fn[flag-3],"rb");
		if(fp==NULL) break;
		fread(m_Rra,256,1,fp);
		fread(m_Gra,256,1,fp);
		fread(m_Bra,256,1,fp);
		fclose(fp);
		break;
*/
	default:
		for( k=0;k<256;k++)
		{
			m_Rra[k]=k;
			m_Gra[k]=k;
			m_Bra[k]=k;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -