图象怪问题

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 打赏 收藏 转发到动态 举报
写回复
用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效果是一样的,划线的行数,位置都是一样的。
也就是有些行操作无效,不知道为什么。。。。。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧