線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1759
推到 Plurk!
推到 Facebook!

Scanline的用法

尚未結案
pedrowu99
一般會員


發表:3
回覆:3
積分:1
註冊:2004-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-22 23:33:45 IP:218.164.xxx.xxx 未訂閱
如果我不使用TBitmap物件 我可以將一堆的pixel用SCANLINE的方式 丟到Image1裡面嗎
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-23 09:35:26 IP:61.64.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-26 16:45:40 IP:61.62.xxx.xxx 未訂閱
pedrowu99, 您好    重看了一下你所發問的問題,不知是否誤解了你的問題? 若只是不用TBitmap物件而要把一堆的pixel丟到Image1裡的話,那就簡單多了。 連SCANLINE的方式都不用,直接使用  
ShowBMP: TImage;
ShowBMP := TImage.Create(nil);
ShowBMP.Picture.LoadFromFile('C:\test.bmp'); 
即可。 不知你的問題適合哪一個解答? 我也在努力學習中 ^ ^
------
我也在努力學習中,若有錯謬請見諒。
chenliyan163
一般會員


發表:30
回覆:30
積分:12
註冊:2003-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-26 19:14:10 IP:61.175.xxx.xxx 未訂閱
我们首先需要知道图象显示的一些理论,计算机是用像素显示图像的,每个像素有像素深度值,每个像素包含的信息是不同的数字。 例如,图像的像素深度是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
系統時間:2024-05-02 7:30:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!