国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
使用GDI 縮放圖片文件
使用GDI 縮放圖片文件
發(fā)布于:軟件開發(fā)網(wǎng) 來源:互聯(lián)網(wǎng) 作者:佚名 時間:2009-02-26 00:03

總結(jié)一下個人所知道的使用GDI 縮放圖片的方法.

方法一:最簡單的,使用GetThumbnailImage,這個方法的局限性對支持內(nèi)嵌縮略圖的圖片文件無效.因為MSDN中提到:如果圖片文件有內(nèi)嵌的縮略圖,那么就提取這個縮略圖返回,否則就縮放原圖片,不過我想對位圖還是安全的:

Bitmap *image=newBitmap(L"MagicLinux.bmp");

Image*pScaledImage=NULL;

UINTnWidth=image->GetWidth()/2;

UINTnHeight=image->GetHeight()/2;

pScaledImage=image->GetThumbnailImage(nWidth,nHeight,NULL,NULL);

deletepScaledImage;

deleteimage;

方法二,使用Graphics::DrawImage,這樣還可以控制IntERPolationMode(插值模式,在縮放和旋轉(zhuǎn)時候使用),即可以控制縮放質(zhì)量高低.也可以通過Graphics對象做其他的控制.

方法也比較簡單,但是卻費了我好久時間才研究出來,沒辦法,不熟悉GDI ,在MSDN中翻來翻去,:)

Bitmap*ScaleBitmap(Bitmap*PBitmap,UINTnWidth,UINTnHeight)

{

Bitmap*pTemp=newBitmap(nWidth,nHeight,pBitmap->GetPixelFormat());

if(pTemp)

{

Graphics*g=Graphics::FromImage(pTemp);

if(g)

{

//usethebestinterpolationmode

g->SetInterpolationMode(InterpolationModeHighQualityBicubic);

g->DrawImage(pBitmap,0,0,nWidth,nHeight);

deleteg;

}

}

returnpTemp;

}

pScaledImage=ScaleBitmap(image,nWidth,nHeight);

方法三,是從Codeguru上一個帖子上看到,和方法二類似,但是用了GDI的東東,我試了試,沒成功,得到的是一幅黑圖片,可能的原因是Bitmap::FromHBITMAP的第二個參數(shù)設(shè)置不對

原文代碼如下:

Bitmap*bitmap=newBitmap(TempBuf);//Createthebitmap

HDCScreen=GetDC(WindowVars.Handle);

piTemp->hdc=CreateCompatibleDC(Screen);//CreateamemoryDC

HBITMAPhbitmap;

if(bStretchPictures)

hbitmap=CreateCompatibleBitmap(Screen,Size.X,Size.Y);

else

hbitmap=CreateCompatibleBitmap(Screen,bitmap->GetWidth(),bitmap->GetHeight());

SelectObject(piTemp->hdc,hbitmap);//InitializetheDC

Graphics*graphics=newGraphics(piTemp->hdc);//CreatetheGraphicsclass

if(bStretchPictures)

graphics->DrawImage(bitmap,0,0,Size.X,Size.Y);//Drawthescaledimage

else

graphics->DrawImage(bitmap,0,0,bitmap->GetWidth(),bitmap->GetHeight());

ReleaseDC(WindowVars.Handle,Screen);

deletegraphics;

deletebitmap;

另外再補上保存圖片的代碼:

boolSaveAsImageFile(Image*pImage,LPCWSTRlpszFileName,LPCWSTRlpszImageType)

{

UINT num=0;

//numberofimageencoders

UINT size=0;

//sizeoftheimageencoderarrayinbytes

ImageCodecInfo*pImageCodecInfo=NULL;

if(GetImageEncodersSize(&num,&size)!=Ok||size==0)

returnfalse; //Failure

pImageCodecInfo=(ImageCodecInfo*)(malloc(size));

if(pImageCodecInfo==NULL)

returnfalse; //Failure

if(GetImageEncoders(num,size,pImageCodecInfo)!=Ok)

returnfalse;

boolbOk=false;

for(UINTj=0;j<num; j)

{

if(wcscmp(pImageCodecInfo[j].MimeType,lpszImageType)==0)

{

pImage->Save(lpszFileName,&(pImageCodecInfo[j].Clsid));

bOk=true;

break;

}

}

free(pImageCodecInfo);

returnbOk;

}

調(diào)用象這樣就可以保存成各種圖片(當然要求有對應(yīng)的encoder才行):

SaveAsImageFile(pScaledImage,L"1.bmp",L"image/bmp");

SaveAsImageFile(pScaledImage,L"1.jpg",L"image/jpeg");

SaveAsImageFile(pScaledImage,L"1.png",L"image/png");

方法四:?

最后

一個不錯的GDI FAQsite:http://www.bobpowell.net/faqmain.htm

eXMexiaomou@gmail.com

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
GDI+ example
一些關(guān)于GDI+的文字——圖像、位圖和metafile
使用GDI+對圖像處理的一些C#代碼
VC++.NET的GDI+入門之位圖和圖標
VC2005 GDI 編程
GDI+學(xué)習(xí)及代碼總結(jié)之
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服