jpg画像を縮小すると画質が悪くなる – プログラミング – Home

jpg画像を縮小すると画質が悪くなる
 
通知
すべてクリア

[解決済] jpg画像を縮小すると画質が悪くなる


roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

jpeg画像をサムネイル表示(50%縮小表示)したいのですが、
StretchBlt関数で縮小すると画像の色の境目あたりが
変な色になってしまいます。縮小表示で何かいい方法がありましたら、
ご教授ください。
開発環境は、
VC++6.0、Windows2000、PlatFormSDK
です。

CDocumentクラスとCViewクラスで構成されたMDIです。

ドキュメントクラスの「開く」イベントのときにJPEG画像ファイルを
選択して画像表示しています。

// 引数(lpszPathName)はjpegのファイル名
BOOL CTestDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
LPDISPATCH pDisp;
COleVariant varName(lpszPathName);
long Status = OleLoadPictureFile(varName, &pDisp);
if ( Status >= 0 )
{
delete m_pPicture;
m_pPicture = NULL;
CDocument::DeleteContents();
ASSERT(m_pPicture == NULL);

m_pPicture = new CPictureHolder;
m_pPicture->SetPictureDispatch((LPPICTUREDISP)pDisp);

HBITMAP hBitmap = GetBitmap();
if (hBitmap == NULL)
return FALSE;
m_pBitmap = new CBitmap;
m_pBitmap = CBitmap::FromHandle(hBitmap);
return TRUE;
}
return FALSE;
}

ビュークラスのOnInitialUpdateでビットマップ画像のサイズを取得し、
表示時(OnDraw時)にサイズを半分にしてOnDrawで表示しています。

void CTestView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTemp(600, 600);
SetScrollSizes(MM_HIENGLISH, sizeTemp);

CPddbDoc* pDoc = GetDocument();

if (mDc->GetSafeHdc() == NULL)
{
BITMAP bm;
CClientDC dc(this);
OnPrepareDC(&dc);
mBitmap = pDoc->GetPicture();
mDc->CreateCompatibleDC(&dc);
mDc->SelectObject(mBitmap);
mBitmap->GetObject(sizeof(bm), &bm);
mSizeOriginal.cx = bm.bmWidth;
mSizeOriginal.cy = bm.bmHeight;
mSizeNew = mSizeOriginal;
dc.DPtoLP(&mSizeNew);
}
}

void CTestView::OnDraw(CDC* pDC)
{
// 半分のサイズで表示
pDC->StretchBlt(0, 0, mSizeNew.cx/2, -mSizeNew.cy/2, mDc,
0, 0, mSizeOriginal.cx, mSizeOriginal.cy, SRCCOPY);
}


引用未解決
トピックタグ
いろは
 いろは
(@いろは)
ゲスト
結合: 21年前
投稿: 43
 

いろはです。

SetStretchBltModeを使うとどうでしょう?


返信引用
roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

ありがとうございます。
StretchBltの前にSetStretchBltModeを入れたら
滑らかな画像が表示されました。

以下、ソースです。

pDC->SetStretchBltMode(HALFTONE);
pDC->StretchBlt(0, 0, mSizeNew.cx/2, -mSizeNew.cy/2, mDc,
0, 0, mSizeOriginal.cx, mSizeOriginal.cy, SRCCOPY);


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました