社区
图形处理/算法
帖子详情
图象怪问题
starshz
2003-11-05 11:41:41
在对一张720*576灰度图象处理的时候
我想画线
用循环
BYTE *lpSrc;//指向图象数据指针
for(int i=0;i<=500;)
{
memset(lpSrc+720*i,255,720);
i+=50;
}
把i+=50换作i+=100效果是一样的。有些行没有画线。
但是换作i++;就全抹白了。
不明白为什么,,,郁闷啊
...全文
112
10
打赏
收藏
图象怪问题
在对一张720*576灰度图象处理的时候 我想画线 用循环 BYTE *lpSrc;//指向图象数据指针 for(int i=0;i<=500;) { memset(lpSrc+720*i,255,720); i+=50; } 把i+=50换作i+=100效果是一样的。有些行没有画线。 但是换作i++;就全抹白了。 不明白为什么,,,郁闷啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
starshz
2003-11-08
打赏
举报
回复
用StretchDIBits就有这个问题吗?
哪怎么办呢?
Ariesman
2003-11-07
打赏
举报
回复
你可以尝试一下在Acdcee中显示,缩放时亦会出现问题
你恰恰用了StretchDIBits
Ariesman
2003-11-07
打赏
举报
回复
这就对头咯。。。。。:)
starshz
2003-11-07
打赏
举报
回复
我把改变后的图像保存起来,是显示问题。
有几行就是不下显示正确像素值。
显示代码如下,不知道哪里有错,各位大侠,帮忙看看
///////////////////////
///ID是资源ID
///twidth=720
///theight=576
///temple1指向图像纯数据区域,为256色灰度图象
//////////////
BITMAPINFO *bihtemp=(BITMAPINFO *)(new BYTE[1064]);
memset(bihtemp,0,1064);
bihtemp->bmiHeader.biSize = 40;
bihtemp->bmiHeader.biWidth = twidth;
bihtemp->bmiHeader.biHeight = thight;
bihtemp->bmiHeader.biPlanes = 1;
bihtemp->bmiHeader.biBitCount = 8;
bihtemp->bmiHeader.biSizeImage=twidth*thight;
for(int i=0;i<256;i++)
{
bihtemp->bmiColors[i].rgbBlue=bihtemp->bmiColors[i].rgbGreen=bihtemp->bmiColors[i].rgbRed=i;
}
//调用
HWND numStill = NULL;
GetDlgItem( ID, &numStill );
RECT rc;
::GetWindowRect( numStill, &rc );
long lStillWidth = rc.right - rc.left;
long lStillHeight = rc.bottom - rc.top;
HDC hdcStill = ::GetDC( numStill );
////
LPLOGPALETTE lpLogPalette=(LPLOGPALETTE)(new BYTE[sizeof(LOGPALETTE)
+ sizeof(PALETTEENTRY)
* 256]);
lpLogPalette->palVersion=0x300;
lpLogPalette->palNumEntries=256;
for(i=0;i<256;i++)
{
lpLogPalette->palPalEntry[i].peBlue=lpLogPalette->palPalEntry[i].peGreen=lpLogPalette->palPalEntry[i].peRed=i;
lpLogPalette->palPalEntry[i].peFlags=0;
}
CPalette alDIB;
alDIB.CreatePalette(lpLogPalette);
// 获取DIB调色板,并选中它
HPALETTE hPal;
HPALETTE hOldPal;
hPal = (HPALETTE) alDIB.m_hObject;
// 选中调色板
hOldPal = ::SelectPalette(hdcStill, hPal, TRUE);
////
PAINTSTRUCT ps;
::BeginPaint(numStill, &ps);
SetStretchBltMode(hdcStill, COLORONCOLOR);
StretchDIBits(
hdcStill, 0, 0,
lStillWidth, lStillHeight,
0, 0, twidth, thight,
temple1,
(BITMAPINFO *)bihtemp,
DIB_RGB_COLORS,
SRCCOPY );
::EndPaint(numStill, &ps);
::SelectPalette(hdcStill, hOldPal, TRUE);
::ReleaseDC( numStill, hdcStill );
//////////////
if(bihtemp)delete[] bihtemp;
if(lpLogPalette)delete[] lpLogPalette;
skinny
2003-11-05
打赏
举报
回复
你想实现的效果是什么?i++的话当然是全抹白啊,因为每行都画嘛。i+=50和i+=100不会效果相同吧,至少没画线的行数不同吧
wangzi163
2003-11-05
打赏
举报
回复
步长不能太小啊。
starshz
2003-11-05
打赏
举报
回复
所以是怪问题啊
要实践才知道,
理论上确实是不可能出现的。
starshz
2003-11-05
打赏
举报
回复
没有啊,就是打开一个720*576的灰度图
显示啊什么的都正常,
如国有问题,那么取i++;就不会是全白了。
huanyun
2003-11-05
打赏
举报
回复
不会吧 i+=50,i+=100操作的行数不同啊 怎么效果一样了
你的代码其他部分一定没问题么?
starshz
2003-11-05
打赏
举报
回复
我就是奇怪为什么i+=50,i+=100效果是一样的,划线的行数,位置都是一样的。
也就是有些行操作无效,不知道为什么。。。。。
matab图像专题精讲
课程内容主要包括入门MATLAB图像处理图像类型转换、图像处理图像的基本操作、MATLAB图像处理常用技巧、MATLAB图像处理关键技术、整数小波S变换对图像进行分解和重构、直线识别拟合角平分线案例、对于模糊和加性噪声...
Matlab显示图像
问题
,double处理后,图像变白
在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现...
图像分割最全综述
图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的
问题
之一。所谓图像分割...
图像分割综述
图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的
问题
之一。所谓图像分割...
最全综述 | 图像分割算法
图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的
问题
之一。所谓图像分割...
图形处理/算法
19,469
社区成员
50,697
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章