2015-04-24 1 views
3

Я хотел бы узнать Rust и подумал, что было бы весело обрабатывать изображения. Я не знаю, с чего начать ... piston/rust-image? Но даже с этим, с чего мне начать?Как я могу обработать изображения с использованием ржавчины?

+0

BTW, вопросы получат лучшие ответы (и, следовательно, станут более полезными для вас), если они специфичны, например. включая [то, что вы пробовали] (http://mattgemmell.com/what-have-you-tried/), и указывает, где вы запутались/потеряны, например. возможно, вы не знаете, как установить библиотеку, может быть, вы не знаете, как создать изображение для изменения. Я принял последнее в своем ответе, но я не уверен! Не забудьте уточнить вопрос, если вы все еще потеряли. – huon

+0

Добро пожаловать в переполнение стека! В дополнение к существующим советам вы должны прочитать [Какие темы я могу задать] (http://stackoverflow.com/help/on-topic) и [Как задать хороший вопрос] (http://stackoverflow.com/помощь/как к спрашивать). Например, неясно, есть ли у вас опыт создания процедурных образов на любом языке. К сожалению, SO все равно не подходит для ответа на этот вопрос! – Shepmaster

+0

Вы правы, это был очень широкий вопрос. Спасибо, что терпеливы. @ huon-dbaupp получил это место, хотя: я хотел знать, как создать изображение, отредактировать его и сохранить. Процедурные материалы могут прийти позже. Еще раз спасибо. – Rik

ответ

4

Место для начала - docs и the repository.

Это не сразу видно с целевой страницы документации, но основной тип в image - ImageBuffer.

new function позволяет построить ImageBuffer, представляющий изображение с заданной шириной /, хранения пикселей данного типа (например, RGB, или что with transparency). Можно использовать такие методы, как pixels_mut, get_pixel_mut и put_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 example из программно генерации an image. Когда я использую новую библиотеку, я открою документы и, если смущен, репо специально для поиска примеров.

+0

На стороне примечания, я хочу, чтобы такие вещи, как «elmesque», были реализованы против «ржавого изображения» вместо того, чтобы требовать более ориентированные на рабочий стол части поршня. – ArtemGr

+0

Спасибо большое! это был пример, который отсутствовал в документации для запуска! –

+3

Этот код не компилируется, потому что теперь 'Imagebuffer' требует два аргумента: тип пикселя и контейнер для его хранения. Вы должны изменить, например, «let mut image = ImageBuffer :: , Vec > :: new (WIDTH, HEIGHT);' – Month