(Byte*)pBitmap->ScanLine(i);这句有什么问题?

redrd 2003-09-06 02:47:10
Byte *ptr1;
pBitmap->PixelFormat=pf24bit;
for(int i=0;i<pBitmap->Height;i++)
{
ptr1=(Byte *)pBitmap->ScanLine[i];
}

//上面写法是否有什么问题啊?我运行多次这个过程就报错:EOutOfResources:参数错误.
...全文
41 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2003-10-20
  • 打赏
  • 举报
回复
struct RGB //定义一个RGB颜色结构
{
byte BlueColor;
byte GreenColor;
byte RedColor;
};

RGB *pRGBLine;
pBitmap->PixelFormat = pf24bit;//24位真彩色模式
for(i = 0; i < pBitmap->Height; i++)
{
pRGBLine = (RGB *)pBitmap->ScanLine[i];
//pRGBLine[j].RedColor //红色
//pRGBLine[j].GreenColor //绿色
//pRGBLine[j].BlueColor //蓝色
}
weibz0525 2003-10-20
  • 打赏
  • 举报
回复
1.pBitmap是否载入了图象?
2.tBitmap1的width和height是否已经附值?
3.ptr2=<Byte*>(tBitmap1->ScanLine[i+y1]);
如果pBitmap和tBitmap1的height相同,y1又是大于0的,
当ptr1=<Byte*>(pBitmap->ScanLine[pBitmap->Height]);,那么ptr2肯定会越界。指针当然报错了。
4.同理,下面那个ptr[x]里面的x1也是一样。
redrd 2003-10-17
  • 打赏
  • 举报
回复
????????????????????
就是上面的代码,调用几十次就会出错!!
TopCoderONE 2003-10-17
  • 打赏
  • 举报
回复
不用这么麻烦吧,在WIN98系统以上,使用SDK就可以实现吧。
redrd 2003-10-17
  • 打赏
  • 举报
回复
void __fastcall DrawScreen::TransparentBmp(Graphics::TBitmap* pBitmap,Graphics::TBitmap* tBitmap1,int iDiv,int x1,int y1)
{
//透明效果
try
{
Byte *ptr1,*ptr2;
//iDiv 透明度1-100
//tBitmap1新图
pBitmap->PixelFormat=pf24bit;
tBitmap1->PixelFormat=pf24bit;
for(int i=0;i<pBitmap->Height;i++)
{
ptr1=<Byte*>(pBitmap->ScanLine[i]);
ptr2=<Byte*>(tBitmap1->ScanLine[i+y1]);
// static_cast<BYTE*>
for(int j=0;j<pBitmap->Width*3;j++)
{
int iColor;
iColor=ptr1[j]*iDiv/100+ptr2[j+x1*3]*(100-iDiv)/100;
if(iColor<1)iColor=1;
if(iColor>255)iColor=255;
ptr1[j]=iColor;
}
}
}
catch(Exception&eError)
{
//error

OutError("透明计算出错 "+eError.ClassName()+ " : " +eError.Message);
}

}
xizhouhawk 2003-09-17
  • 打赏
  • 举报
回复
这句是获取第i行第一个像素地址的意思

zhuxiaozhong 2003-09-15
  • 打赏
  • 举报
回复
看一看:
Byte *ptr1;
pBitmap->PixelFormat=pf24bit;
for(int i=0;i<pBitmap->Height;i++)
{
ptr1=(Byte *)pBitmap->ScanLine[i];
for(int x=0;x<pBitmap->Width;x+=3)
{
r=ptr1[3*x];
g=ptr1[3*x+1]
b=ptr1[3*x+2];
}
}
能解决问题哦!
weibz0525 2003-09-08
  • 打赏
  • 举报
回复
把代码贴全了
eangel9 2003-09-06
  • 打赏
  • 举报
回复
你的pBitmap加载的是24 位真彩图象,上面的应该没有错误。你后面的程序是怎么写的。
如果对像素做处理的话,要注意三个字节表示一个像素。我觉得错误是出在你后边的程序中。
for(int i=0;i<pBitmap->Height;i++)
{
ptr1=(Byte *)pBitmap->ScanLine[i];
for(int x=0;x<pBitmap->Width;x++)
{
r=ptr1[3*x];
g=ptr1[3*x+1]
b=ptr1[3*x+2];
}
}
zjqyb 2003-09-06
  • 打赏
  • 举报
回复
这一段没有问题,可能其他地方有问题
chenpeng20000 2003-09-06
  • 打赏
  • 举报
回复
这一句没有问题呀,非常正确

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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