Delphi world - ine для pixelformat

Bitmap.Scanline для PixelFormat

Хтось із Італії попросив мене приклад використання pf1bit в зображеннях (Bitmaps), я послав часто відповіді з наявних заготовок, подумав, і додав тут інші деталі для pf8bit і pf24bit.

Нове в Delphi 3 властивість scanline допускає швидкий доступ до окремих пикселям, але необхідно вказати з яким Bitmap.PixelFormat ви працюєте, перш ніж зможете мати доступ до пікселів.

Можливі PixelFormats включають:
  1. pfDevice
  2. pf1bit
  3. pf4bit
  4. pf8bit
  5. pf15bit
  6. pf16bit
  7. pf24bit
  8. pf32bit
pf24bit-зображення

Для pf24bit-зображень необхідно визначити:

Примітка: TRGBTriple визначено в модулі Windows.PAS.

Для того, щоб до існуючого 24-бітного зображення мати доступ як до зображення, створеного з дозволом 3 байта на піксель, зробіть наступне:

Доступ до такого формату зображення легко отримати, використовуючи TByteArray (визначено в SysUtils.PAS):

(Я думаю (але сам цього не пробував), що ви зможете отримати доступ до pf16bit-зображень, використовуючи такі визначення в SysUtils.PAS:

Для того, щоб обробити 8-бітове (pf8bit) зображення, використовуйте конструктор подібний цьому, який створює гістограму зображення:

Доступ до pf8bit-зображень здійснюється досить легко, з тих пір, як вони стали використовувати один байт на піксель. Але ви можете зберегти багато пам'яті, якщо вам необхідний єдиний біт на піксель (як, наприклад, з різними масками) в разі pf1bit-зображення.

Як і у випадку з pf8bit-зображеннями, використовуйте TByteArray для доступу до pf1bit-ним лініях чергування (Scanlines). Але для доступу до окремих пикселям вам знадобитися працювати з битами окремого байта. Так, ширина лінії чергування дорівнює Bitmap.Width DIV 8 байт.

Наведений нижче код показує як можна створити шаблон 1-бітного зображення: чорний, білий, смужки, "g", "стрілка" і випадковий - опція "інвертовану" також доступна. (Сподіваюся, технологію ви освоете без праці.)

Створіть форму з Image1: для TImage я використовую одне зображення Image1 розміром 256x256 і властивістю Stretch: = TRUE, щоб окремі пікселі було легко розгледіти. Кнопки Black, White і Stripes мають властивість tags, c відповідними значеннями 0, 255, і 85 ($ 55 = 01010101 в двійковій системі числення), що викликають при натисканні обробник події ButtonStripesClick.

Кнопки "g" і "arrow" мають власні обробники подій, що дозволяють коректно роздрукувати тестові зображення на принтері HP Laserjet.

"Random" випадковим чином встановлює біти в 1-бітному зображенні.

"Invert" змінює нулі на одиниці і навпаки.

Схожі статті