2011-02-04 116 views
0

給定圖片(格式是問題的一部分)我希望能夠將其轉換爲我的「格式」。我的格式就是說,只是一個簡單的X by Y布爾數組,覆蓋時間圖像的大小,說明特定像素是否「開啓」。顏色無關緊要。我不知道圖像格式(如BMP,JPG,GIF),因此只要讀取圖像然後「映射」該像素狀態即可。將「圖片」/「圖片」格式轉換爲我自己的

我猜測難度可能是確定圖像中是否有特定的像素處於「開」狀態。由於這是我創建的程序的特定部分的一部分,因此我可以確保用戶僅以單一顏色和特定範圍創建圖像。例如通常的紅色,綠色,黃色等

我想要實現的是讓用戶使用任何他們想要的圖像程序(例如mspaint)來繪製他們的圖像,然後將其保存並導入到我的應用程序中稍後的一點。

是否有任何圖形格式允許我這樣做?我希望我已經提供了足夠的信息,爲我所追求的。我將提供一個非常基本的例子。

例如:image created是20,10,並且用戶從點0,0 - > 6,0(即7個像素寬)繪製了一條直線。他們已經將它保存爲BMP,JPG。然後,我想打開該圖像,並對其進行掃描以確定是否繪製了特定的像素。所以像素0,0 1,0 2,0 3,0 4,0 5,0 6,0將「開」,其他所有像素將關閉。如果我不得不迫使他們將它保存爲特定類型,我對此感到高興。

我使用Delphi作爲我的開發語言。

感謝

傑森

+0

對於它的價值,你所描述的 - 開/關圖形 - 基本上是一個單色的位圖。你所要做的就是創建一個面具。 – GrandmasterB 2011-02-04 07:28:55

回答

3

出可以加載一些不同的圖像格式用Delphi盒子(BMP,JPG,PNG,GIF我想這些天太)。然後有很多第三方選項可用於支持其他圖像類型。

將圖像加載到內存後,最簡單的事情就是將其轉換爲Tbitmap。有幾種方法可以做到這一點。但既然你想弄亂像素,那麼我會創建一個Tbitmap並將它的像素格式設置爲24位,然後我會將你加載的圖像繪製到Tbitmap的畫布上。

bmp.Width:=sourecimage.Width; 
bmp.Height:=sourceimage.Height; 
bmp.PixelFormat:=pf24bit; 
bmp.Canvas.Draw(0,0,sourceimage); 

雖然這可能不是這樣做的最有效方法,它可以讓你在圖像中的已知格式的內存,你只需要擔心使用它,而不是編碼不同格式的大約一個方法。

您現在訪問的圖像信息2種選擇: - 像素房產(這是很慢,但很容易理解) - Scanlines的屬性(這是快,但有點複雜使用)

兩者都將允許您迭代圖像中的所有像素並確定其顏色。

現在你已經有了像素,你需要弄清楚像素是什麼定義爲「ON」,什麼定義像素爲「OFF」。爲此,我認爲你將不得不選擇一種顏色來表示一個「OFF」像素(例如白色 - $ FFFFFF),所以如果一個像素是那種顏色,那麼它是關閉的,否則它是開啓的。

如果不知道你真的想達到什麼目標,那麼有點難以進一步瞭解。你需要表現還是簡單?你真的需要你自己的結構,或者只是位圖數據(實際上是一個二維數組),就足夠好了。

而且一個重要的說明。使用JPG文件並不好。 JPG使用近似的顏色,沒有辦法(我知道),你可以保證圖像壓縮/解壓縮後將加載什麼顏色。雖然你的「OFF」像素可能是「接近白色」,但不能保證它們會「完全白色」。

+0

謝謝。我會按照你的建議去做。速度不是一個因素。選擇BMP作爲格式似乎是要走的路。我會對它進行測試,看看我能否根據你的答案使其工作。他們只會創建一種顏色的原始BMP,所以我可以假設除此之外的任何顏色都會關閉 - 一旦我確定自己如何知道他們選擇了哪種顏色:) - 可能是我現在遇到的第一種顏色。謝謝。我會將其標記爲已回答。 – Jason 2011-02-04 10:03:31