|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Одновременная работа TrackBar по изменению изображения. |
|
|
Delphi - Одновременная работа TrackBar по изменению изображения.
|
|
Новый участник Сообщения: 15 |
Добрый день! Делаю программу по обработке фото. На начальном этапе столкнулся с проблемой невозможности одновременной работы TrackBar при регулировке яркости, контрастности и цветов. Отрегулировав что-то одно, при переключении на другой TrackBar происходит сброс изображения до первоначального уровня. Подкинул сторонний компонент OrImage - яркость и контрастность регулируются в униссон - цвет - по прежнему нет. Если интересно выложу исходники и пришлю программу. Спасибо заранее. Есть еще много вопросов по программе, но это по мере решения.
|
|
|
Отправлено: 18:15, 09-12-2011 |
|
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать kotkkn, без исходников - тяжеловато. Я склонен полагать, что где-то допущена логическая ошибка. Нужен проект + указание номера среды разработки.
|
|
------- Отправлено: 18:14, 11-12-2011 | #2 |
|
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Получил исходники. Запустил программу.
kotkkn, я тебя умоляю, пиши комментарии! У тебя куча однотипных функций, прочитывать каждую - это жестоко. В следующих раз выдели проблемные места (функции) каким либо образом, чтобы весь исходник взад-вперед не листать. kotkkn, ежик ты зеленый, имей уважение к читающим. За день и так глаза в кучу, так еще 5 разных файлов без объяснений. (project1.dpr... ага, уже лучше) (исходники ...) Все. Не хочу. kotkkn, Задание тебе: Каждой кнопке дать нормальное название, а не Button123. Привести в порядок код (расставить табуляцию и написать комментарии к сложным моментам, дать комментарии к каждой функции) В следующий раз указывать файл и проблемную функцию. Всю ту кашу, что пока есть я еще посмотрю, может чего пойму. Все что я сказал - принять к сведению и исполнять. Исполнять в первую очередь для себя. Удачи, жду исправленных текстов. И публикуй их сразу сюда. Я на форуме далеко не один, товарищи помогут, дельное что подскажут. |
|
------- Отправлено: 00:18, 12-12-2011 | #3 |
|
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать lxa85, сделаю!
|
|
Отправлено: 10:48, 12-12-2011 | #4 |
|
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Переписал все и добавил объяснения:
unit foto;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, ExtCtrls, ComCtrls, ExtDlgs,
jpeg, ImgList, DBCtrls, Math, Clipbrd, Spin, Buttons, OrImage, OrImageEditor;
type
TForm1 = class(TForm)
btnFileLoad: TButton;
btnBumGlyan: TButton;
btnBumMatt: TButton;
btnSize10x15: TButton;
btnSize15x21: TButton;
btnSize20x30: TButton;
btnStartAll: TButton;
btnStopAll: TButton;
btnPageDown: TButton;
btnPageUp: TButton;
btnSaveAll: TButton;
btnExit: TButton;
lblVarSize: TLabel;
SavePictureDialog1: TSavePictureDialog;
OpenPictureDialog1: TOpenPictureDialog;
PutFile1: TEdit;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
lblNameBrightnessShort1: TLabel;
lblVarBrightness: TLabel;
lblNameBrightnessShort2: TLabel;
GroupBox2: TGroupBox;
lblNameContrastShort1: TLabel;
lblVarContrast: TLabel;
lblNameContrastShort2: TLabel;
CheckBox2: TCheckBox;
GroupBox3: TGroupBox;
lblNameRedShort1: TLabel;
lblVarRed: TLabel;
lblNameRedShort2: TLabel;
CheckBox3: TCheckBox;
trbRedValue: TTrackBar;
trbGreenValue: TTrackBar;
trbBlueValue: TTrackBar;
lblNameGreenShort2: TLabel;
lblNameBlueShort2: TLabel;
lblNameGreenShort1: TLabel;
lblNameBlueShort1: TLabel;
lblVarGreen: TLabel;
lblVarBlue: TLabel;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel4: TBevel;
Bevel6: TBevel;
SheetFile1: TSpinEdit;
SheetFile2: TSpinEdit;
SheetFile3: TSpinEdit;
SheetFile4: TSpinEdit;
SheetFile5: TSpinEdit;
SheetFile6: TSpinEdit;
PutFile2: TEdit;
PutFile3: TEdit;
PutFile4: TEdit;
PutFile5: TEdit;
PutFile6: TEdit;
OrImage1: TOrImage;
Bevel5: TBevel;
OrImage2: TOrImage;
OrImage3: TOrImage;
OrImage4: TOrImage;
OrImage5: TOrImage;
OrImage6: TOrImage;
trbBrightness: TTrackBar;
trbContrast: TTrackBar;
lblVarBum: TLabel;
procedure btnFileLoadClick(Sender: TObject);
procedure btnSaveAllClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure OrImageDblClick(Sender: TObject);
procedure TrackBarBrightnessChange(Sender: TObject);
procedure TrackBarContrastChange(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure OrImage1DblClick(Sender: TObject);
procedure OrImage2DblClick(Sender: TObject);
procedure OrImage3DblClick(Sender: TObject);
procedure OrImage4DblClick(Sender: TObject);
procedure OrImage5DblClick(Sender: TObject);
procedure TrackBarChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
OrImage: TOrImage;
procedure UpdateEffects;
end;
var
Form1: TForm1;
const
MaxPixelCount = 32768;
type
pRGBArray = ^TRGBArray;
TRGBArray = ARRAY[0..MaxPixelCount-1] OF TRGBTriple;
function Min(a, b: integer): integer;
function Max(a, b: integer): integer;
implementation
uses Unit2;
{$R *.dfm}
const strTrueORFalse: array[Boolean]of string = ('false','true');
procedure TForm1.btnFileLoadClick(Sender: TObject); //Загрузка файлов в каждый Image
var
q : integer;
begin
if (openpicturedialog1.Execute) and (openpicturedialog1.FileName <> '') then
try
for q := 0 to openpicturedialog1.Files.Count - 1 do
case q of
0:begin
OrImage1.Picture.LoadFromFile(openpicturedialog1.Files.Strings[q]);
OrImage1.PictureOriginal := OrImage1.Picture;
end;
1:begin
OrImage2.Picture.LoadFromFile(openpicturedialog1.Files.Strings[q]);
OrImage2.PictureOriginal := OrImage2.Picture;
end;
2:begin
OrImage3.Picture.LoadFromFile(openpicturedialog1.Files.Strings[q]);
OrImage3.PictureOriginal := OrImage3.Picture;
end;
3:begin
OrImage4.Picture.LoadFromFile(openpicturedialog1.Files.Strings[q]);
OrImage4.PictureOriginal := OrImage4.Picture;
end;
4:begin
OrImage5.Picture.LoadFromFile(openpicturedialog1.Files.Strings[q]);
OrImage5.PictureOriginal := OrImage5.Picture;
end;
5:begin
OrImage6.Picture.LoadFromFile(openpicturedialog1.Files.Strings[q]);
OrImage6.PictureOriginal := OrImage6.Picture;
end;
end;
except
ShowMessage('Ошибка!');
end;
end;
procedure TForm1.formCreate(Sender: TObject); //Определение нулевых позиций при старте
begin
lblVarBrightness.Caption := '0';
lblVarContrast.Caption := '0';
trbRedValue.Position := 0;
lblVarRed.Caption := '0';
trbGreenValue.Position := 0;
lblVarGreen.Caption := '0';
trbBlueValue.Position := 0;
lblVarBlue.Caption := '0';
end;
procedure TForm1.TrackBarChange(Sender: TObject); //Регулировка по цветам
var i, j, k, l, m, n, o, p, e, f, r, t, g, h, RedValue, GreenValue, BlueValue : integer;
OrigRow, DestRow: pRGBArray; //Назначение переменных
begin
RedValue := trbRedValue.Position; //Присвоение переменным начальных значений TrackBar-ов
GreenValue := trbGreenValue.Position;
BlueValue := trbBlueValue.Position;
if RedValue <= 0 then lblVarRed.Caption := IntToStr(RedValue)
else lblVarRed.Caption := Format('+%d', [RedValue]);
if GreenValue <= 0 then lblVarGreen.Caption := IntToStr(GreenValue)
else lblVarGreen.Caption := Format('+%d', [GreenValue]);
if BlueValue <= 0 then lblVarBlue.Caption := IntToStr(BlueValue)
else lblVarBlue.Caption := Format('+%d', [BlueValue]);
for i := 0 to OrImage1.Picture.Height - 1 do
begin
OrigRow := OrImage1.PictureOriginal.Bitmap.ScanLine[i]; //считывание изображения
DestRow := OrImage1.Picture.Bitmap.ScanLine[i];
for j := 0 to OrImage1.Picture.Width - 1 do
begin //алгоритм изменения цветов
if RedValue > 0 then
DestRow[j].rgbtRed := Min(255, OrigRow[j].rgbtRed + RedValue)
else
DestRow[j].rgbtRed := Max(0, OrigRow[j].rgbtRed + RedValue);
if GreenValue > 0 then
DestRow[j].rgbtGreen := Min(255, OrigRow[j].rgbtGreen + GreenValue)
else
DestRow[j].rgbtGreen := Max(0, OrigRow[j].rgbtGreen + GreenValue);
if BlueValue > 0 then
DestRow[j].rgbtBlue := Min(255, OrigRow[j].rgbtBlue + BlueValue)
else
DestRow[j].rgbtBlue := Max(0, OrigRow[j].rgbtBlue + BlueValue);
end;
end;
OrImage1.Repaint; //перерисовка изображения
end;
procedure TForm1.UpdateEffects; //Изменение яркости и контрастности
begin
if OrImage1<> nil then with OrImage1 do //Задание начальных значений
begin
trbBrightness.Position:=PicBrightness;
trbContrast.Position:=PicContrast;
end;
end;
procedure TForm1.FormActivate(Sender: TObject); //принудительное обновление эффекта яркости и контрастности
begin
if OrImage1<>nil then
UpdateEffects;
end;
procedure TForm1.TrackBarBrightnessChange(Sender: TObject); //Регулировка яркости
begin
if OrImage1=nil then Exit;
OrImage1.PicBrightness:=trbBrightness.Position;
lblVarBrightness.Caption:=' '+IntToStr(OrImage1.PicBrightness)+' ';
end;
procedure TForm1.TrackBarContrastChange(Sender: TObject); //Регулировка контраста
begin
if OrImage1=nil then Exit;
OrImage1.PicContrast:=trbContrast.Position;
lblVarContrast.Caption:=' '+IntToStr(OrImage1.PicContrast)+' ';
end;
procedure TForm1.btnSaveAllClick(Sender: TObject); //Сохранение файлов
begin
SavePictureDialog1.Execute
end;
procedure TForm1.btnExitClick(Sender: TObject); //Выход из программы
begin
Close
end;
procedure TForm1.OrImageDblClick(Sender: TObject); //Присвоение двойного нажатия на Image для открытия Form2 (коррекция красных глаз)
begin
ClipBoard.Clear;
ClipBoard.Open;
ClipBoard.Assign(OrImage1.Picture);
ClipBoard.Close;
Form2.Showmodal;
end;
procedure TForm1.OrImage1DblClick(Sender: TObject);
begin
ClipBoard.Clear;
ClipBoard.Open;
ClipBoard.Assign(OrImage2.Picture);
ClipBoard.Close;
Form2.Showmodal;
end;
procedure TForm1.OrImage2DblClick(Sender: TObject);
begin
ClipBoard.Clear;
ClipBoard.Open;
ClipBoard.Assign(OrImage3.Picture);
ClipBoard.Close;
Form2.Showmodal;
end;
procedure TForm1.OrImage3DblClick(Sender: TObject);
begin
ClipBoard.Clear;
ClipBoard.Open;
ClipBoard.Assign(OrImage4.Picture);
ClipBoard.Close;
Form2.Showmodal;
end;
procedure TForm1.OrImage4DblClick(Sender: TObject);
begin
ClipBoard.Clear;
ClipBoard.Open;
ClipBoard.Assign(OrImage5.Picture);
ClipBoard.Close;
Form2.Showmodal;
end;
procedure TForm1.OrImage5DblClick(Sender: TObject);
begin
ClipBoard.Clear;
ClipBoard.Open;
ClipBoard.Assign(OrImage6.Picture);
ClipBoard.Close;
Form2.Showmodal;
end;
function Min(a, b: integer): integer;
begin
if a < b then result := a
else result := b;
end;
function Max(a, b: integer): integer;
begin
if a > b then result := a
else result := b;
end;
end.
|
|
|
Отправлено: 10:58, 13-12-2011 | #5 |
|
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Скорее всего Вы забываете обновлять изображение, которое показываете на экране. Копонента помнит старый рисунок, и отображает его. Хотя я противник использования всяких ЭУ: только прямая работа с байтами
(диб-секция там, или еще как). Будет быстрее и картинка всегда будет актуальной ![]() |
|
Отправлено: 12:33, 13-12-2011 | #6 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Route/Bridge - Одновременная работа 2 ip-адресов | ITSpec | Сетевые технологии | 4 | 06-03-2011 16:56 | |
| Одновременная работа цикла и программы | ShogenOFF | AutoIt | 4 | 13-08-2010 22:48 | |
| Доступ - Одновременная работа в 2-х сетях. | DmitryF | Microsoft Windows 7 | 2 | 26-07-2010 13:31 | |
| одновременная работа монитора и телевизора | altr | Видеокарты | 7 | 08-02-2010 18:48 | |
| одновременная работа (Remote Desktop)... | minion | Microsoft Windows 2000/XP | 15 | 18-11-2006 23:07 | |
|