Построчная заливка
Код:
public static void fill(Btm bm, int x, int y, Color oc, Color nc) LockBits - копирует данные, адресуемые BitmapData.Scan0 в byte массив, содержащий информацию о цветах пикселей . UnlockBits - наоборот. Также методы вызывают lock/unlockbits объекта Bitmap. ColorMatchh - для сравнения цветов. Возвращает true, если они равны. Я думал, что реализовал ее быстрее стандартной перегруженной операции сравнения для Color - ан-нет, порой и медленнее выходит. Сам алгоритм верен лишь отчасти. При желании, поймете, в чем ошибка. Прежде чем я ее исправлю, мне хотелось бы, чтобы вы мне помогли - можно ли вообще избавиться от проверки на выход X,Y за пределы самого изображения, просто реализовав все так, чтобы в этом не было необходимости? Без проверок получается солидный выйгрыш в скорости. - можно ли, не определяя цвет пикселя, понять, что он закрашен(допустим, создать массив bool, при заливке устанавливать соотв. пикселю флаг, перед заливкой сначала проверять этот флаг)? - как можно быстрее сравнить цвета, разными там побитовыми операциями, и имеет ли смысл вообще пытаться реализовать это? - можно ли контролировать ход закраски? Например - проверяется строка ниже. Закрашивается. Строка выше от нее точно закрашена(если ее диапазон крайних значений X больше, чем у текущей), поэтому ее можно не проверять - какие есть слабые места у моей реализации(кроме той ошибки в ней, что я указал)? |
Часовой пояс GMT +4, время: 07:32. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot