我使用Windows(包括7&XP – 都是32位)和C ++编码
我正在接收来自外部源的位图。 这些位图的分辨率是固定的(384×288)
收到位图后,我需要根据可变大小的布局resize,所以我正在使用StretchBlt来执行这些任务。
如果我调整位图到一个更大的屏幕图像,这很好。
用Cern ROOT绘图
将图像从TrueColor更改为1Bpp调色板?
我需要做些什么来将DIB转换为BMP?
使用命名pipe道(C ++)将图像发送到FFMPEG
如何将PNG格式的XImage保存为base64string?
但是,如果我将传入的位图缩小到放置在屏幕上的较小版本,则会在图像上出现一些奇怪的“装箱”效果。
在以下示例中,三个面板中的每个面板的源图像都是相同的。 但是左边的两个(调整小一点)都对他们有拳击/线条效果。
memcpy(at_TempPointer[PortNo],// Destination (void *)VideoBufferAddress,// Source FIXED_IMAGE_WIDTH * FIXED_IMAGE_HEIGHT * BYTES_PER_PIXEL // Number of bytes ); StretchBlt(at_ImageDC[PortNo],// HDC Dest 0,// X Origin Dest 0,// Y Origin Dest at_Width[PortNo],// Width Dest at_Height[PortNo],// Height Dest at_GhDC[PortNo],// HDC Source 0,// X Origin Source 0,// Y Origin Source FIXED_IMAGE_WIDTH,// Width Source FIXED_IMAGE_HEIGHT,// Height Source SRCcopY // Graphic Operation );
但是我想知道这个问题是否在其他地方。
有没有其他人有这种调整图像腐败的经验,知道我可以修复它?
是否存在任何开放源代码的独立静态图像服务器?
在C#应用程序中触发Windows资源pipe理器的“顺时针旋转”操作
在c ++中使用伽马校正来转换jpeg
应用简单的水印后图像大小急剧增加
你使用SetStretchBltMode设置StretchBlt模式吗?
HALFTONE
将源矩形中的像素映射到目标矩形中的像素块。 目标像素块上的平均颜色接近源像素的颜色。
在设置HALFTONE拉伸模式后,应用程序必须调用SetBrushOrgEx函数来设置画笔原点。 如果不这样做,会发生刷子错位。
与VS 2013兼容的基于工作面板的OnPaint代码:
void CMyView::paint_image(CDC* pDC) { CPalette * pal = &m_Palette; if (pal->m_hObject != NULL && m_Bitmap.m_hObject != NULL) { if (pDC != NULL) { CPalette *pOldPalette; pOldPalette = pDC->SelectPalette( pal,FALSE ); pDC->RealizePalette(); SetStretchBltMode(pDC->GetSafeHdc(),HALFTONE); if(flip) pDC->StretchBlt( 0,x*zoomx,y*zoomy,m_pMemDC,x,y,-x,-y,SRCcopY ); else pDC->StretchBlt( 0,SRCcopY ); pDC->SelectPalette( pOldPalette,TRUE ); } else { cclientDC m_pWinDC(this); OnPrepareDC(&m_pWinDC); m_pWinDC.SelectPalette( pal,FALSE ); m_pWinDC.RealizePalette(); SetStretchBltMode(m_pWinDC,HALFTONE); if(flip) m_pWinDC.StretchBlt( 0,SRCcopY ); else m_pWinDC.StretchBlt( 0,SRCcopY ); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。