游戏开发论坛

 找回密码
 立即注册
搜索
查看: 14277|回复: 21

[求助]alphablend算法问题.

[复制链接]

15

主题

231

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
发表于 2007-12-19 17:17:00 | 显示全部楼层 |阅读模式
所有东东我都打包在附件里了,原图是24位,mask图是8位,合成图在用函数混合这一项时报内存错,无法进行合成,我好郁闷啊!

我都已经搞了几天了,没点进展,我快要哭了,哪位大大帮小弟我看看,先谢过了呀!

15

主题

231

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
 楼主| 发表于 2007-12-19 17:20:00 | 显示全部楼层

Re: [求助]alphablend算法问题.

代码:

sf_2007121917207.rar

8.44 KB, 下载次数:

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2007-12-19 18:47:00 | 显示全部楼层

Re:[求助]alphablend算法问题.

呵呵,是delphi的?那没办法了,我没有dephi啊。。郁闷

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2007-12-19 22:47:00 | 显示全部楼层

Re: [求助]alphablend算法问题.

procedure TForm1.AlphaBlend24(BitmapDest, BitmapSrc: TBitmap; Alpha:Byte);
var
  pDest, pSrc : PByteArray;
  X,Y :Integer;
  Beta:Integer;
begin
  Beta := 255 - Alpha;
  for Y := 0 to BitmapDest.Height - 1 do
  begin
    pDest := BitmapDest.ScanLine[Y];
    pSrc  := BitmapSrc.ScanLine[Y];
    for X := 0 to BitmapDest.Width - 1 do
    begin
      pDest[0]:= (pSrc[0] * Alpha + pDest[0] * Beta) div 255;
      pDest[1]:= (pSrc[1] * Alpha + pDest[1] * Beta) div 255;
      pDest[2]:= (pSrc[2] * Alpha + pDest[2] * Beta) div 255;
      Inc(Longword(pDest) ,3); // 指向下一个像素
      Inc(Longword(pSrc ) ,3);
    end;
  end;
end;

看看你的源代码,不出错才怪呢。
PByteArray是动态数组,你在哪里给它分配内存空间了?

15

主题

231

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
 楼主| 发表于 2007-12-20 14:25:00 | 显示全部楼层

Re:[求助]alphablend算法问题.

请问如何改正?

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2007-12-20 18:08:00 | 显示全部楼层

Re:[求助]alphablend算法问题.

告诉你两个函数
GetMem
FreeMem
具体的使用问题,你自己去查吧。

15

主题

231

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
 楼主| 发表于 2007-12-21 11:41:00 | 显示全部楼层

Re:[求助]alphablend算法问题.

楼上的朋友,我改了,但是还是不对呀,还报错,你帮帮我.
procedure TForm1.AlphaBlend24(BitmapDest, BitmapSrc: TBitmap; Alpha:Byte);
var
  pDest, pSrc : PByteArray;
  X,Y :Integer;
  Beta:Integer;
begin
  GetMem(pDest, SizeOf(Byte)*256);
  GetMem(pSrc, SizeOf(Byte)*256);
  Beta := 255 - Alpha;
  for Y := 0 to BitmapDest.Height - 1 do
  begin
    pDest := BitmapDest.ScanLine[Y];
    pSrc  := BitmapSrc.ScanLine[Y];
    for X := 0 to BitmapDest.Width - 1 do
    begin
      pDest[0]:= (pSrc[0] * Alpha + pDest[0] * Beta) div 255;
      pDest[1]:= (pSrc[1] * Alpha + pDest[1] * Beta) div 255;
      pDest[2]:= (pSrc[2] * Alpha + pDest[2] * Beta) div 255;
      Inc(Longword(pDest) ,3); // 指向下一个像素
      Inc(Longword(pSrc ) ,3);
    end;
    FreeMem(pDest, SizeOf(Byte)*256);
    FreeMem(pSrc, SizeOf(Byte)*256);
  end;
end;

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2007-12-21 20:25:00 | 显示全部楼层

Re:[求助]alphablend算法问题.

你分的内存不够。
自己仔细想想到底要用多少内存。

当然,你内存够用的话,每个数组分个几百兆内存,基本就不会报错了。哈哈。

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2007-12-23 16:20:00 | 显示全部楼层

Re:[求助]alphablend算法问题.

不好意思,我抽空多看了一会儿你的程序。
我说的,使用GetMem,并不是问题的本质。
由于你的程序使用了不少第三方控件,我没法进行编译,所以也无法确定你的错误是什么。
以后提交使用第三方控件的源代码,最好能说明使用的是什么控件,以及下载地址。

15

主题

231

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
 楼主| 发表于 2007-12-24 11:44:00 | 显示全部楼层

Re: [求助]alphablend算法问题.

好了,我把三方控件都去掉了.
楼上的朋友你请重新一下次就可以了.

sf_2007122411449.rar

8.66 KB, 下载次数:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 01:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表