掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
dc.PlgBlt()変形後の表示画像の保存 (ID:73067)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> // points で指定された菱形領域に外接する矩形を求める > : > CRect rect(horz[0], vert[0], horz[2] + (horz[1] - horz[0]), vert[2] + (vert[1] - vert[0])); あーごめん。この処理じゃダメだ。一部ケースにしか対応できてない… 後述の様に(机上だけで組んでるコードなので未だ間違っている可能性あるが)修正。 > その関数内で memDCは共通に働かないでしょうか? 今一日本語として旨く意味が理解できなかった。けど「イメージ保存する処理を共通関数化したい」のだと”推察して”回答する。 後、先にも言った通りかなりヤマ勘で書いている。 例えば CMemDC というクラスはhannyaさんのオリジナルクラス(VS2008sp1以降のMFCにもCMemDCという名のクラスは存在するが恐らく別物)だと思われる。 なので、hannyaさんが示されたコードから「CMemDCはこんな使い方するクラスなんだろうなぁ」とか勝手に想像して書いている。 そういう訳なんで、このコードそのままをhannyaさんのソースに持っていっても動くかどうかは不明。hannyaさんの方で適切に修正を加える等してください。 また、この回答がhannyaさんが望んでいるモノとはズレている可能性もある。その場合はスルーして。 void saveImage(CDC *pdc, int x, int y, int width, int height, LPCTSTR filepath) { CRect rect(x, y, x + width, y + height); rect.NormalizeRect(); CMemDC mem; mem.CreateCompatibleDC(pdc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(pdc, rect.Width(), rect.Height()); // save image CBitmap *prev = mem.SelectObject(&bitmap); mem.BitBlt(0, 0, rect.Width(), rect.Height(), &dc, rect.left, rect.top, SRCCOPY); mem.SaveJPEG(filepath); mem.SelectObject(prev); } void CChildView::OnPaint() { : if( !transfindex) dc.BitBlt(0, 0, m_imageSiH, m_imageSiV, &memDC, 0, 0, SRCCOPY); else dc.PlgBlt(points, &memDC, 0, 0, m_imageSiH, m_imageSiV, CBitmap(), 0, 0);//平行四辺形移行 if( stilImage )//== 1 saving the final still image { m_imageD_F_Name.Format("KolamImages\\%s-N.jpg", m_strFileTitle); if (transfindex) { // points で指定された菱形領域に外接する矩形を求める const POINT 4th = { points[1].x + points[2].x - points[0].x, points[1].y + points[2].y - points[0].y } CRect rect( min(points[0].x, min(points[1].x, min(points[2].x, 4th.x))), min(points[0].y, min(points[1].y, min(points[2].y, 4th.y))), max(points[0].x, max(points[1].x, max(points[2].x, 4th.x))), max(points[0].y, max(points[1].y, max(points[2].y, 4th.y))) ); saveImage(&dc, rect.left, rect.top, rect.Width(), rect.Height(), m_imageD_F_Name); } else { saveImage(&memDC, 0, 0, m_imageSiH, m_imageSiV, m_imageD_F_Name); } stilImage = 0; // OFF save image } }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.