Scanline的用法 |
尚未結案
|
pedrowu99
一般會員 發表:3 回覆:3 積分:1 註冊:2004-03-14 發送簡訊給我 |
|
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
pedrowu99, 您好 由Help中得知--
引言: ScanLine is used only with DIBs (Device Independent Bitmaps) for image editing tools that do low-level pixel work.所以,ScanLine 是針對 DIBs (Device Independent Bitmaps)。 換言之,ScanLine 是用來快速讀取Bitmaps的。所以...就我所知應該是不行吧。 不過倒是可以透過ScanLine去讀取Bitmaps之後,透過指標或其它方式去讀取相關pixel作後續處理再放回原TImage中,即所謂的影像處理。 我也在努力學習中 ^ ^ 發表人 - adonis 於 2004/03/23 09:39:34
------
我也在努力學習中,若有錯謬請見諒。 |
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
pedrowu99, 您好 重看了一下你所發問的問題,不知是否誤解了你的問題?
若只是不用TBitmap物件而要把一堆的pixel丟到Image1裡的話,那就簡單多了。
連SCANLINE的方式都不用,直接使用
ShowBMP: TImage; ShowBMP := TImage.Create(nil); ShowBMP.Picture.LoadFromFile('C:\test.bmp');即可。 不知你的問題適合哪一個解答? 我也在努力學習中 ^ ^
------
我也在努力學習中,若有錯謬請見諒。 |
chenliyan163
一般會員 發表:30 回覆:30 積分:12 註冊:2003-09-15 發送簡訊給我 |
我们首先需要知道图象显示的一些理论,计算机是用像素显示图像的,每个像素有像素深度值,每个像素包含的信息是不同的数字。 例如,图像的像素深度是8位,则每个像素可以储存256种颜色。每位可有两个值(0 或 1),于是就有2x2x2x2x2x2x2x2 = 256。 现在有24位和32位像素深度的图像,我只说明这种图像怎样实现反色。 在RGB颜色模式(R=红, G=绿, B=蓝)下的24位像素深度的图像中,包含3个颜色通道,每个通道各占8位,于是每个通道有256个可能值。3个颜色通道合起来显示最终图像。 理论已够了,我们可以利用以下过程实现: procedure InvertImage(const AnImage:TImage);
var
BytesPorScan: integer;
vi_width, vi_height: integer;
p: pByteArray;
begin
//仅在24位或32位色下有效
If not (AnImage.Picture.Bitmap.PixelFormat in[pf24Bit, pf32Bit])then
raise exception.create(''Error, Format File not soported!''); try
BytesPorScan := Abs(Integer(AnImage.Picture.Bitmap.ScanLine[1])-
Integer(AnImage.Picture.Bitmap.ScanLine[0]));
except
raise exception.create(''Error'');
end; //翻转每个像素的RGB数值
for vi_height := 0 to AnImage.Picture.Bitmap.Height - 1 do
begin
P := AnImage.Picture.Bitmap.ScanLine[vi_height];
for vi_width := 0 to BytesPorScan - 1 do
P^[vi_width] := 255-P^[vi_width];
end;
AnImage.Refresh; 最重要的是for循环的部分。 投稿人:CoDelphi.com 投稿日期:2001-5-13 9:54:00
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |