Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 638

/ вопрос открыт /

Дорогие эксперты!Как у рисунка можно изменить яркость,контрастность и насышенность?

Аксион Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 18 июня 2007, 12:09
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Скачай себе базу знаний Delphi World. Там много интересного. Вот, к примеру, я там нашёл такую вещь (см. приложение):

Приложение:
  1. { **** UBPFD *********** by delphibase.endimus.com ****
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12. ***************************************************** }
  13.  
  14. procedure Contrast(Bitmap: TBitmap; Value: Integer; Local: Boolean);
  15.  
  16. function BLimit(B: Integer): Byte;
  17. begin
  18. if B < 0 then
  19. Result := 0
  20. else if B > 255 then
  21. Result := 255
  22. else
  23. Result := B;
  24. end;
  25.  
  26. var
  27. Dest: pRGBTriple;
  28. x, y, mr, mg, mb,
  29. W, H, tr, tg, tb: Integer;
  30. vd: Double;
  31.  
  32. begin
  33. if Value = 0 then
  34. Exit;
  35. W := Bitmap.Width - 1;
  36. H := Bitmap.Height - 1;
  37. if Local then
  38. begin
  39. mR := 128;
  40. mG := 128;
  41. mB := 128;
  42. end
  43. else
  44. begin
  45. tr := 0;
  46. tg := 0;
  47. tb := 0;
  48. for y := 0 to H do
  49. begin
  50. Dest := Bitmap.ScanLine[y];
  51. for x := 0 to W do
  52. begin
  53. with Dest^ do
  54. begin
  55. Inc(tb, rgbtBlue);
  56. Inc(tg, rgbtGreen);
  57. Inc(tr, rgbtRed);
  58. end;
  59. Inc(Dest);
  60. end;
  61. end;
  62. mB := Trunc(tb / (W * H));
  63. mG := Trunc(tg / (W * H));
  64. mR := Trunc(tr / (W * H));
  65. end;
  66. if Value > 0 then
  67. vd := 1 + (Value / 10)
  68. else
  69. vd := 1 - (Sqrt(-Value) / 10);
  70. for y := 0 to H do
  71. begin
  72. Dest := Bitmap.ScanLine[y];
  73. for x := 0 to W do
  74. begin
  75. with Dest^ do
  76. begin
  77. rgbtBlue := BLimit(mB + Trunc((rgbtBlue - mB) * vd));
  78. rgbtGreen := BLimit(mG + Trunc((rgbtGreen - mG) * vd));
  79. rgbtRed := BLimit(mR + Trunc((rgbtRed - mR) * vd));
  80. end;
  81. Inc(Dest);
  82. end;
  83. end;
  84. end;
  85.  


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 19 июня 2007, 08:09


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.02 сек.