Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Формула Circular vs Битовые Операции в Delphi

Delphi , Графика и Игры , GIF

Преобразование битмапа в формат 16 бит R5G6B5

Преобразование изображения в формат 16 бит с разложением каналов RGB на 5, 6 и 5 бит соответственно является распространенной задачей, особенно в областях, где требуется уменьшение размера файла за счет уменьшения глубины цвета. В контексте языка программирования Delphi и Object Pascal, использование формул и битовых операций для выполнения таких преобразований является ключевым.

Пример функции преобразования RGB32 в RGB565

function RGB32ToRGB565(R, G, B: Byte): Word;
begin
  Result := ((R and $F8) shl 8) or ((G and $FC) shl 3) or (B shr 3);
end;

Различие в производительности: формула Circular vs Битовые Операции

Circular предложил использовать формулу для преобразования цветов, которая включает деление и умножение:

var
  c: TFPColor;
  maxEncodedRed, encodedRed: longword;
begin
  maxEncodedRed := 1 shl bitDepth - 1; // с bitDepth = 5, maxEncodedRed = 31
  encodedRed := (c.red * maxEncodedRed + 32767) div 65535;
  c.red := (encodedRed * 65535 + (maxEncodedRed shr 1)) div maxEncodedRed;

В то время как Thaddy предложил использовать более простые битовые операции, которые обычно выполняются быстрее на большинстве процессоров.

Преобразование всего изображения

Для преобразования всего изображения необходимо пройти по каждому пикселю и применить функцию преобразования:

for i := 0 to src_bitmap.Width-1 do
  for j := 0 to src_bitmap.Height-1 do
    dst_bitmap.Canvas.Pixels[i, j] := RGB32ToRGB565(GetRValue(src.Canvas.Pixels[i, j]), GetGValue(src.Canvas.Pixels[i, j]), GetBValue(src.Canvas.Pixels[i, j]));

Запись изображения в файл BMP

После преобразования всех пикселей, изображение можно сохранить в файл BMP, установив соответствующий формат пикселей:

writer := TFPWriterBMP.Create;
try
  writer.BitsPerPixel := 16;
  destImg.SaveToStream(AStream, writer);
finally
  writer.Free;
end;

Важные замечания

  • При использовании функции RGB32ToRGB565 необходимо помнить, что при преобразовании теряется часть информации о цвете, особенно в синем канале, который сжимается с 8 до 3 бит.
  • При записи изображения в файл BMP, важно учитывать структуру заголовка файла и корректно указать разрешение изображения.
  • Различные приложения могут использовать разные стандарты для интерпретации разрешения изображения, поэтому следует тщательно проверять и, при необходимости, корректировать эти значения.

Заключение

Преобразование изображения в формат 16 бит R5G6B5 требует внимания к деталям и понимания как функционируют битовые операции в языке Delphi. Выбор между формулой Circular и битовыми операциями зависит от конкретных требований к производительности и точности.

Создано по материалам из источника по ссылке.

Преобразование изображения из формата 32 бита (R8G8B8) в формат 16 бит (R5G6B5) с использованием битовых операций для уменьшения размера изображения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: GIF ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 05:12:04/0.0033080577850342/0