jpeg转bmp文件的问题。 ( 积分: 100 )

  • 主题发起人 主题发起人 匪匪
  • 开始时间 开始时间

匪匪

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Bmp := TBitmap.Create;
jpegBmp := TJPEGImage.Create;

jpegBmp.LoadFromFile('d:/xxx.jpg');

Bmp.Assign(jpegBmp);
Bmp.TransparentColor := clBlack; //mask值为黑色
Bmp.Transparent := True;

Canvas.Draw(0, 0, Bmp);
end;

运行后,发现有黑色的杂边。黑色部分不能完全的透明。晕啦。而且bmp格式的文件却可以清晰的将黑色透明。急啦。
 
也就是想让一个jpeg的图片透明,代码如上,大家帮我看看,先自己顶下。
 
你确认背景是纯黑的?
JPEG是压缩格式的,很可能背景色不纯,导致转换后杂色
 
是黑色的。其实原文件是gif的。
我从gif为原始文件,用图形转换工具保存成了bmp,jpeg两个格式的。
 
转成JPEG的话,肯定会出现杂边的,jpeg是有损压缩,而且所有象素都经过模糊等类似的方法处理过,所以肯定有杂边。
不想出现这种情况,就用bmp或者png吧。
 
比较可行的方法是把JPEG转成BMP后,做一个灰度测量,对那些运算得到的灰度值接近 255 的象素,全部置成黑色。然后还原图片,再做你想要的黑色透明处理。
 
我咋晚看了下。发现转成jpg格式后,确实出现了杂边。但我现在不想用bmp。这样文件会很大,我的文件只是jpg的,有什么办法可以去掉杂边不。

to 小雨哥:
程序能实现不?
 
程序实现啦,用Scanline扫描图像然后进行变色就OK啦
 
可是我怕影响速度啊。因为我要将两个图像合成一个,而且两个图像可以拖动与改大小的。每当大小或位置改变后,都需要重新生成一个新的图像并显示出来。如果每次都要经过换算,那不是很慢吗?我做的东西跟isee这个软件差不多。我看他的这个功能实现的就很好,速度很快,而且他的图形可以是gif,jpg,bmp.psd..等格式的。

难道我用translatecolor这个属性来将一个图形的底色透明,这种方法只适用于bmp吗。如果想适合于更多格式的图形,该用什么方法呢?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3650186这是我前一个帖,里面有具体的需求。请大家帮我看看
 
楼主可以用PNGImage!
BMP格式没有Alpha通道,无法展现透明色,当对透明色文件存为bmp的时候,颜色会变化(特别是透明边缘),无法保证透明边缘清晰。PNG或者GIF格式可以保存alpha通道,所以用对应的Image控件即可解决问题。

http://www.delphifans.com/SoftView/SoftView_507.html
这里下载PNGImage
 
pngimage没用过。不是很想用第三方的控件。因为我如果用这个,可能自己的代码要改动。因为我代码里面都没有怎么用上TImage这个控件,如果换成pngimage,不知道控制是否方便。
 
楼主大概连我给的连接都没点开看过吧?
关于PNGImage的说明:
用来显示PNG图像的控件,支持PNG图片的Alpha通道。支持半透明特效,是GIF的替代格式。[red]直接在uses单元引用pngimage就可以在标准Image中使用,可以不用安装[/red]。
 
兄弟,俺下过了的。呵。但我不是要用png格式的图片。我的图片主要是jpg,gif。
 
不知道能否利用pngimage这个。让底色在转换的时候变纯。其实我对tbitmap不是特熟,所以不知道这个tpngobject是否可行。先研究下。谢谢大家,希望大家能关注这个问题,谢谢。有事要出去,晚上回来再看。[:D]
 
问题解决了,是我那个JPG色不纯。谢谢大家
 

Similar threads

后退
顶部