请教有关图形图像问题

arcore 2002-08-21 09:06:34
小弟用Delphi已有较长时间,但主要是接触数据库应用方面。近段时间由于项目需要,要用到图形图像编程技术,但小弟手上没有相关的技术资料,所以向朋友们请教。

请问:怎么样用TrackBar实现图像的亮度、灰度、对比度的调节?怎么样实现图像反色和伪彩?

我知道,这些问题对于常搞图形图像处理的朋友来说很简单。由于我没有接触过,所以请大家帮帮忙。并不要求有详细的源代码(当然,有更好),请指出实现方法的技术细节,如果有相关组件可用(免费),也请指出下载网址。
...全文
64 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
IBMlotus 2002-10-03
  • 打赏
  • 举报
回复
伪彩的算法有很多种,介绍一本书自己看
《C++数字图象处理》
arcore 2002-09-20
  • 打赏
  • 举报
回复
上面我所提到的问题中,除了图像的伪彩技术没有实现以外,其它的问题都已
经解决(是用FastBmp组件实现) 。由于是用组件解决的,源代码我就不一一贴出来
了。如果有朋友要FastBmp组件,可以打于www.Google.com,录入“FastBmp”搜索所有中文网页,可以查到一大堆FastBmp组件的下载网址,我是在CSDN里面下载的。有这方面需求的朋友可以打开FastBmp的源代码看看。


再加300分,请精于图形图像处理的朋友帮帮忙,解决一下图像的伪彩技术。
ztiger 2002-09-19
  • 打赏
  • 举报
回复
下面这段代码好像是我在delphibbs上看到的,但并没用到trackbar.布置有没有用。你可以到delphibbs上看看。
procedure bmpbright(mybitmap: tbitmap; // 用来处理的BITMAP,要求24BIT
brightness: integer; // 亮度,范围:0-255
contrast: integer; // 对比度,范围:-255-255
displayingray: boolean; // 是否显示为灰度,TRUE为灰度
reversedisplay: boolean; // 是否显示负片效果,TRUE为负片
colorfilter: byte; // 颜色过滤:1=滤赤色,2=荧光色
x1,y1,x2,y2: integer); // 处理区域
var
thew,theh: integer;
i,j: integer;
p: pbytearray;
colorlevel: int64;
sty,stx,eny,enx: integer;
bripos,conpos: integer;
sum1,sum2,sum3: int64;
ave1,ave2,ave3: integer;
times: integer;
rlevel,glevel,blevel: integer;
maxnum,minnum: integer;
begin
mybitmap.PixelFormat :=pf24bit;
conpos:=contrast+100;
times:=conpos;
if conpos>100 then times:=conpos*conpos div 100;
with mybitmap do
begin
thew:=width;
theh:=height;
if (x1=x2) or (y1=y2) then
begin
x1:=1;
y1:=1;
x2:=thew-1;
y2:=theh-1;
end
else
begin
minnum:=min(y1,y2);
maxnum:=max(y1,y2);
y1:=minnum;
y2:=maxnum;
minnum:=min(x1,x2);
maxnum:=max(x1,x2);
x1:=minnum;
x2:=maxnum;
end;
if x1<1 then x1:=1;
if y1<1 then y1:=1;
if x2>thew-1 then x2:=thew-1;
if y2>theh-1 then y2:=theh-1;
sum1:=0;
sum2:=0;
sum3:=0;
for i:=y1 to y2 do
begin
p:=scanline[i];
for j:=x1 to x2 do
begin
sum1:=sum1+p[j*3+2];
sum2:=sum2+p[j*3+1];
sum3:=sum3+p[j*3];
end;
end;
ave1:=sum1 div ((y2-y1+1)*(x2-x1+1));
ave2:=sum2 div ((y2-y1+1)*(x2-x1+1));
ave3:=sum3 div ((y2-y1+1)*(x2-x1+1));
for i:=y1 to y2 do
begin
p:=scanline[i];
for j:=x1 to x2 do
begin
colorlevel:=((p[j*3+2]-ave1)*times div 100)+ave1+brightness;
if colorlevel>255 then colorlevel:=255;
if colorlevel<0 then colorlevel:=0;
p[j*3+2]:=colorlevel;
colorlevel:=((p[j*3+1]-ave2)*times div 100)+ave2+brightness;
if colorlevel>255 then colorlevel:=255;
if colorlevel<0 then colorlevel:=0;
p[j*3+1]:=colorlevel;
colorlevel:=((p[j*3]-ave3)*times div 100)+ave3+brightness;
if colorlevel>255 then colorlevel:=255;
if colorlevel<0 then colorlevel:=0;
p[j*3]:=colorlevel;
if colorfilter=1 then
p[j*3+2]:=0;
if colorfilter=2 then
begin
p[j*3+2]:=0;
p[j*3]:=0;
end;
if displayingray then
begin
rlevel:=p[j*3+2];
glevel:=p[j*3+1];
blevel:=p[j*3];
colorlevel:=rlevel*rlevel+glevel*glevel+blevel*blevel;
colorlevel:=colorlevel div (rlevel+glevel+blevel+1);
p[j*3]:=colorlevel;
p[j*3+1]:=colorlevel;
p[j*3+2]:=colorlevel;
end;
if reversedisplay then
begin
p[j*3]:=$ff-p[j*3];
p[j*3+1]:=$ff-p[j*3+1];
p[j*3+2]:=$ff-p[j*3+2];
end;
end;
end;
end;
end;
cdimp 2002-08-30
  • 打赏
  • 举报
回复
帮你UP
wxjh 2002-08-29
  • 打赏
  • 举报
回复
最好使用图像api函数作
arcore 2002-08-29
  • 打赏
  • 举报
回复
谢谢前面的几位朋友,我到你们介绍的几个站上去看了看,找到了一些东西,但问题没有彻底的解决好。

我再看一看,也请大家帮帮忙,如果手上有现成的组件或处理方法,请帮帮忙,Mail我一份:arcore@163.com,真诚感谢!
findcsdn 2002-08-29
  • 打赏
  • 举报
回复
gz
ssjc 2002-08-28
  • 打赏
  • 举报
回复
这个问题一二句话没法说清楚,你可以去看 帮助
你可以去:www.developer.com 上看看!
del_c_sharp 2002-08-28
  • 打赏
  • 举报
回复
这种算法网上不少,51delphi好像有个算法包,不过不如用控件来的快,其实不过是对像素的点处理以及相关性处理
JamesDF 2002-08-28
  • 打赏
  • 举报
回复
http://lianwm.3322.net/index.html
arcore 2002-08-27
  • 打赏
  • 举报
回复
还有没有?
eulb 2002-08-22
  • 打赏
  • 举报
回复
这方面的控件还是蛮多的
去www.playicq.com多看看吧

帮你up
hfycl 2002-08-21
  • 打赏
  • 举报
回复
up
lance 2002-08-21
  • 打赏
  • 举报
回复
http://www.playicq.com/dispdoc.php?t=27&id=1086
SydPink 2002-08-21
  • 打赏
  • 举报
回复
scanline();对速度要求不高就用这个吧.至于效果的算法.自己看看书就知道了。
沧-海-桑-田 2002-08-21
  • 打赏
  • 举报
回复
用别人的控件就行了 ThemeEngine
arcore 2002-08-21
  • 打赏
  • 举报
回复
分不够,小弟可以再加。

小弟不常在论坛里面回贴,所以也没有多少“积蓄”,请见谅:)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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