关于图象文件在内存中操作的问题(50分)

  • 主题发起人 主题发起人 king3721
  • 开始时间 开始时间
K

king3721

Unregistered / Unconfirmed
GUEST, unregistred user!
在进行图形操作中
我从文件中载入一个JPEG格式的文件
我不想用Pixel[x,y]来对图象的像素进行操作,速度太慢
又因为载入的是JPEG文件
所以不能用TBitmap的ScanLine
各位高手
有什么好的办法
不要用控件
 
先把TJPEGImage转化成TBitmap再处理。

JPEG转BMP:

procedure JpegToBmp(const Src: TJPEGImage; var Dest: TBitmap);
begin
Dest.Width := Src.Width;
Dest.Height := Src.Height;
Dest.PixelFormat := Src.PixelFormat;
Dest.Canvas.Draw(0,0,Dest.Width,Dest.Height,Src);
end;

通过调用JpegToBmp(jpg1,bmp1)这样的方法就可以操纵Dest所指向的位图了。
 
将JPEG图象转换为BMP格式,对BMP图象进行操作。
MyJpg :TJpegImage;
MyBmp :TBitmap;

MyJpg:=TJpegImage.Create;
MyJpg.LoadFromFile(.......);
MyBmp :=TBitmap.Create;
MyBmp.Assign(MyJpeg);
MyJpg.Free;
然后就可以对MyBmp进行操作了。
 
Sachow
卷起千堆雪tyn

我测试了一下你们的两种方法
不全可行
比如说 如果我在FORM上创建了一个静态的TImage
这时候用你们的方法就会出错
你们可以试一下
我也在看其它的方法
 
不要在设计时就在Image中静态地加入JPEG图片,在Form的OnShow事件里再LoadFromFile。
在Image中画图:
with Image1 do
Canvas.Draw(0,0,Width,Height,Bmp1)
//Bmp1:由Jpeg转化的Bitmap
 
同意楼上
如果用TBitMap.ScanLine[x,y]
要注意数组范围
我曾经做过图片的淡入淡出
速度很快,Pixel[x,y]简直不能比
因为TBitMap.ScanLine[x,y]直接操作显存
 
>> 因为TBitMap.ScanLine[x,y]直接操作显存 ???
真的? 有点怀疑。

 
to pcexplorer如何注意数组范围呢?
 
多人接受答案了。
 
后退
顶部