2015-04-24 57 views
3

我想學習Rust,並認爲程序化生成圖像會很有趣。我不知道從哪裏開始...... piston/rust-image?但即使我該從哪裏開始?如何使用防鏽圖像程序化生成圖像?

+0

順便說一句,如果問題是特定問題的話,問題會得到更好的答案(因此對你更有幫助)。包括[您嘗試過的](http://mattgemmell.com/what-have-you-tried/),以及您迷惑/丟失的地方,例如也許你不知道如何安裝庫,也許你不知道如何創建一個圖像進行修改。我在回答中假設後者,但我不確定!如果你仍然迷失,務必澄清問題。 – huon

+0

歡迎來到Stack Overflow!除了現有的建議,你應該閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic)和[如何問一個好問題](http://stackoverflow.com /幫助/如何對問)。例如,目前還不清楚您是否有任何語言的程序圖像生成經驗。不幸的是,SO仍然不適合回答這個廣泛的問題! – Shepmaster

+0

你是對的,這是一個非常廣泛的問題。感謝您的耐心。然而,@ huon-dbaupp明白了:我想知道的是如何創建一個圖像,進行編輯並保存。程序性的東西可以晚點來。再次感謝。 – Rik

回答

4

開始的地方是docsthe repository

從文檔的登錄頁面不是很明顯,但image的核心類型是ImageBuffer

new function的允許一個來構造ImageBuffer表示與給定/寬度的圖像,存儲在給定類型(例如RGB,或者with transparency)的像素。可以使用像pixels_mut,get_pixel_mutput_pixel(後者在文檔中的pixels_mut以下)的方法來修改圖像。例如。

extern crate image; 

use image::{ImageBuffer, Rgb}; 

const WIDTH: u32 = 10; 
const HEIGHT: u32 = 10; 

fn main() { 
    // a default (black) image containing Rgb values 
    let mut image = ImageBuffer::<Rgb<u8>>::new(WIDTH, HEIGHT); 

    // set a central pixel to white 
    image.get_pixel_mut(5, 5).data = [255, 255, 255]; 

    // write it out to a file 
    image.save("output.png").unwrap(); 
} 

它看起來像:output

回購是作爲起點特別有用的,因爲它包含的例子,尤其是,它具有的編程產生an imagean example。在使用新庫時,我會打開文檔,並且如果感到困惑,則專門用於查找示例的回購。

+0

在一個側面說明中,我希望像「elmesque」這樣的內容針對「鏽蝕圖像」實施,而不是要求更多面向桌面的活塞部分。 – ArtemGr

+0

非常感謝!那是在文檔中缺失的例子以便運行! –

+3

此代碼不會'編譯,因爲現在'Imagebuffer'需要兩個參數:像素類型和容器來存儲它。例如,您應該更改爲'let mut image = ImageBuffer :: ,Vec > :: new(WIDTH,HEIGHT);' – Month