gdi++编程

1. 引入GDI++ 

   stdafx.h 

//...
typedef unsigned long ULONG_PTR, *PULONG_PTR;
#include <Gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib, "GdiPlus.lib")
static ULONG_PTR m_pGdiToken;
static struct GdiplusStartupInput m_gdiplusStartupInput;
//...

2.初始化 ,可以在 BOOL C*DemoApp::InitInstance() 或BOOL C*DemoDlg::OnInitDialog()中初始化

//初始化GDI+.
GdiplusStartup(&m_pGdiToken, &m_gdiplusStartupInput, NULL);

3.  打开图像和显示图片

void DrawImg2Hdc(Image *image, UINT id, CWnd* cWnd)
{
	if(image==0) return;
	CDC* pDC = cWnd->GetDlgItem(id)->GetDC();
	CRect rect;
	cWnd->GetDlgItem(id)->GetWindowRect(&rect);
	Graphics graphics( pDC->m_hDC);
	graphics.DrawImage(image,0,0, rect.Width(), rect.Height());
}
Image* KLoadImage(CString filename)
{
	LPWSTR strjpg = new WCHAR[255];
	LPTSTR lpStr2 = filename.GetBuffer( filename.GetLength() );
	int nLen2 = MultiByteToWideChar(CP_ACP, 0,lpStr2, -1, NULL, NULL);
	MultiByteToWideChar(CP_ACP, 0, lpStr2, -1, strjpg, nLen2);

	Image *image=0;
	image=Image::FromFile(strjpg,true);
	//生成缩略图
	//Image* thumbnailImage = image->GetThumbnailImage(10,10);
	return image;
}
Bitmap* KLoadBitmap(CString filename)
{
	LPWSTR strjpg = new WCHAR[255];
	LPTSTR lpStr2 = filename.GetBuffer( filename.GetLength() );
	int nLen2 = MultiByteToWideChar(CP_ACP, 0,lpStr2, -1, NULL, NULL);
	MultiByteToWideChar(CP_ACP, 0, lpStr2, -1, strjpg, nLen2);

	Bitmap *image=0;
	image=Bitmap::FromFile(strjpg,true);
	//生成缩略图
	//Image* thumbnailImage = image->GetThumbnailImage(10,10);
	return image;
}

4. 获取图像像素

unsigned char   *pImageBuffer;
pImageBuffer = 0;

	long BufferLen;
	imageWidth = image->GetWidth();
	imageHeight = image->GetHeight();
	BufferLen= imageWidth * imageHeight * 3;

	BitmapData bitmapData={0};
	bitmapData.Stride = WIDTHSTEP(imageWidth);
	bitmapData.Scan0 = new BYTE[bitmapData.Stride * imageHeight];
	if(pImageBuffer!=0)
		delete pImageBuffer;
	pImageBuffer=new unsigned char[BufferLen];
	Rect rect(0,0, imageWidth, imageHeight);
	image->LockBits(&rect, ImageLockModeRead | ImageLockModeUserInputBuf, 
                            PixelFormat24bppRGB, &bitmapData); 
	
	memcpy(pImageBuffer, (BYTE*)bitmapData.Scan0, BufferLen); 
	
	delete bitmapData.Scan0;
	image->UnlockBits( &bitmapData);



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值