b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

使用StretchBlt函数进行图像缩放

电脑杂谈  发布时间:2016-05-04 09:00:18  来源:网络整理

你是否正在寻找关于stretchblt的内容?让我把最完美的东西奉献给你:

代码片段(2) [全屏查看所有代码]

1.[代码][C/C++]代码

// Resize CImage void CreateStretchImage(CImage *pImage,CImage *ResultImage,int StretchHeight,int StretchWidth){ if(pImage->IsDIBSection()){ // 取得 pImage 的 DC CDC* pImageDC1 = CDC::FromHandle(pImage->GetDC()); // Image 因為有自己的 DC, 所以必須使用 FromHandle 取得對應的 DC CBitmap *bitmap1=pImageDC1->GetCurrentBitmap(); BITMAP bmpInfo; bitmap1->GetBitmap(&bmpInfo); // 建立新的 CImage ResultImage->Create(StretchWidth,StretchHeight,bmpInfo.bmBitsPixel); CDC* ResultImageDC = CDC::FromHandle(ResultImage->GetDC()); // 當 Destination 比較小的時候, 會根據 Destination DC 上的 Stretch Blt mode 決定是否要保留被刪除點的資訊 ResultImageDC->SetStretchBltMode(HALFTONE); // 使用最高品質的方式 ::SetBrushOrgEx(ResultImageDC->m_hDC,0,0,NULL); // 調整 Brush 的起點 // 把 pImage 畫到 ResultImage 上面 StretchBlt(*ResultImageDC,0,0,StretchWidth,StretchHeight,*pImageDC1,0,0,pImage->GetWidth(),pImage->GetHeight(),SRCCOPY); // pImage->Draw(*ResultImageDC,0,0,StretchWidth,StretchHeight,0,0,pImage->GetWidth(),pImage->GetHeight()); pImage->ReleaseDC(); ResultImage->ReleaseDC(); } } // 建立指定大小的圖形 // 輸入: 原始圖檔=pBitmap, 指定大小=StretchHeight StretchWidth, 結果圖檔=pResultBmp // Usage: void reateStretchBmp(CBitmap* pBitmap ,int StretchHeight ,int StretchWidth, CBitmap *pResultBmp){ // 建立顯示螢幕的 DC CDC dcScreen; dcScreen.Attach(::GetDC(NULL)); // 取得原始圖檔的 dc CDC dcMemory; dcMemory.CreateCompatibleDC(&dcScreen); CBitmap *pOldOrgBitmap= dcMemory.SelectObject(pBitmap); // 建立新的結果圖形 (指定大小) pResultBmp->CreateCompatibleBitmap(&dcScreen,StretchWidth,StretchHeight); // 取得結果圖形的 dc CDC dcFixMemory; dcFixMemory.CreateCompatibleDC(&dcScreen); CBitmap *pOldReslutBitmap=dcFixMemory.SelectObject(pResultBmp); // 讓 dcFixMemory 選擇到 "結果bmp", 任何對 dcFixMemory 的動作都會反映到 pResultBmp // 把原始圖形縮放畫到 Memory DC上面 BITMAP bmpInfo; pBitmap->GetBitmap(&bmpInfo); // 取得 原始圖檔的寬度與高度 stretchblt(dcFixMemory,0,0,StretchWidth,StretchHeight,dcMemory,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY); // Set Back dcMemory.SelectObject(pOldOrgBitmap); dcFixMemory.SelectObject(pOldReslutBitmap); }

2.[代码]对整个图片做缩放

unsigned char* HCNImage::do_Stretch_Linear(int w_Dest,int h_Dest,int bit_depth,unsigned char *src,int w_Src,int h_Src) { int sw = w_Src-1, sh = h_Src-1, dw = w_Dest-1, dh = h_Dest-1; int B, N, x, y; int nPixelSize = bit_depth/8; unsigned char *pLinePrev,*pLineNext; unsigned char *pDest = new unsigned char[w_Dest*h_Dest*bit_depth/8]; unsigned char *tmp; unsigned char *pA,*pB,*pC,*pD; for(int i=0;i<=dh;++i) { tmp =pDest + i*w_Dest*nPixelSize; y = i*sh/dh; N = dh - i*sh%dh; pLinePrev = src + (y++)*w_Src*nPixelSize; pLineNext = (N==dh) ? pLinePrev : src+y*w_Src*nPixelSize; for(int j=0;j<=dw;++j) { x = j*sw/dw*nPixelSize; B = dw-j*sw%dw; pA = pLinePrev+x; pB = pA+nPixelSize; pC = pLineNext + x; pD = pC + nPixelSize; if(B == dw) { pB=pA; pD=pC; } for(int k=0;k<nPixelSize;++k) { *tmp++ = ( unsigned char )( int )( ( B * N * ( *pA++ - *pB - *pC + *pD ) + dw * N * *pB++ + dh * B * *pC++ + ( dw * dh - dh * B - dw * N ) * *pD++ + dw * dh / 2 ) / ( dw * dh ) ); } } } return pDest; }

以上就是关于stretchblt的全部内容,相信你一定会非常满意,。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-3961-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 郭冰
        郭冰

        也必须要留出公共空间以利大家通行的

      热点图片
      拼命载入中...