Вверх ↑
Этот топик читают: Гость
Ответов: 902
Рейтинг: 27
#1: 2014-07-06 14:08:37 ЛС | профиль | цитата
Здравствуйте. Непойму почему перестала работать схема.
После сравнения, пиксели зелёного цвета, должны преобразоватся в чёрный, остальные пиксели отсеиваются.
Раньше всё работало нормально.
Подскажите пожалуйста в чём может быть дело.

code_33944.txt
карма: 1
Время верстки: %cr_time% Текущее время: %time%
1
файлы: 1code_33944.txt [5.1KB] [145]
Голосовали:sla8a
Ответов: 2278
Рейтинг: 677
#2: 2014-07-06 15:17:53 ЛС | профиль | цитата
juk, проблема возникла при добавлении последних изменений. Спасибо что описали ошибку.
Замените свой файл hiImg_Point.pas вот на этот:
hiimg_point.zip


nesco, обновите пока этот файл (см. выше). Проблема появилась после изменений строки:
#pas
LineTo(pDC, x1 + 1, y1 + 1);
на строку:
#pas
LineTo(pDC, x1, y1);
Но вообще бред какой-то получается при применении трансформации. Получается без трансформации мы рисуем линию, а при трансформации именно точку. Сейчас нету много свободного времени, с понедельника посмотрю все внимательно и протестирую.
карма: 11

0
файлы: 1hiimg_point.zip [1KB] [176]
Гость
Ответов: 17029
Рейтинг: 0
#3: 2014-07-06 15:51:08 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-09 04:55:13
карма: 0

0
Ответов: 902
Рейтинг: 27
#4: 2014-07-06 15:58:23 ЛС | профиль | цитата
Это я выше. Авторизация слетела.
------------ Дoбавленo в 15.58:
ТАКУЮ ОШИБКУ ВЫДАЁТ:


Подготовка к сборке проекта...
Генерация кода целевого языка
Компоновка проекта...
Command line: dcc32.exe "C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\Project11.dpr" "-UC:\Program Files\HiAsm_AltBuild\." -Q
Borland Delphi Version 12.0 Copyright (c) 1983,98 Inprise Corporation

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(1) Error: Illegal character in input file: 'п' ($FF)

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(44) Error: Illegal character in input file: 'Ґ' ($E5)

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(44) Error: Illegal character in input file: 'Ґ' ($E5)

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(44) Error: Illegal character in input file: 'Ё' ($E8)

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(44) Error: Illegal character in input file: '¬' ($EC)

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(44) Error: Illegal character in input file: 'Є' ($EA)

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(44) Error: Illegal character in input file: '­' ($ED)

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiImg_Point.pas(127) Error: '.' expected but end of file found

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiMainForm_9FDF4D0.pas(11) Fatal: Could not compile used unit 'hiImg_Point.pas'
Сборка завершена.

карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26164
Рейтинг: 2127
#5: 2014-07-06 16:49:08 ЛС | профиль | цитата
sla8a писал(а):
Замените свой файл hiImg_Point.pas вот на этот

Выложи его архивом, а не txt файлом, а то кракозябры добавлять совсем не хочется
карма: 22

0
Ответов: 2278
Рейтинг: 677
#6: 2014-07-06 17:51:39 ЛС | профиль | цитата
Вот ссылка на архив hiimg_point.zip.
карма: 11

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#7: 2014-07-06 18:18:34 ЛС | профиль | цитата
Исправил
карма: 22

0
Ответов: 902
Рейтинг: 27
#8: 2014-07-06 19:06:46 ЛС | профиль | цитата
Всё работает. Спасибо!
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 2278
Рейтинг: 677
#9: 2014-07-08 00:38:08 ЛС | профиль | цитата
Посмотрел все внимательнее и вот что получается.
Изначально была ошибка в создании пера для рисования точки (для рисования линий в других элементах как раз все нормально). Размер высчитывался по формуле:
Round((fScale.x + fScale.y) * ReadInteger(_Data,_data_Size,_prop_Size)/2)
и вот это деление на 2 и привело к тому что пришлось рисовать не точку:
MoveToEx(pDC, x, y, nil);
LineTo(pDC, x, y);
а линию:
MoveToEx(pDC, x, y, nil);
LineTo(pDC, x + 1, y + 1);


Так вот к чему в результате пришел:
1. Толщину пера находим по формуле:
Round((fScale.x + fScale.y) * ReadInteger(_Data,_data_Size,_prop_Size))

2. Рисуем именно точку
MoveToEx(pDC, x, y, nil);
LineTo(pDC, x, y);

3. А в процедуре _Set (рисование на канве с доступом как к матрице), удаляем все это безобразие с высчитыванием размера пера (все равно толщина в один пиксель), да и само перо без надобности. И вместо:
#pas
procedure THIImg_Point._Set;
var pen: HPEN;
begin
TRY
if not ImgGetDC(Val) then exit;
x := Round(x * fScale.x);
y := Round(y * fScale.y);
pen := CreatePen(PS_SOLID, Round(fScale.x + fScale.y)/2, Color2RGB(ReadInteger(Val,_data_Color,_prop_Color)));
SelectObject(pDC,Pen);
MoveToEx(pDC, x, y, nil);
LineTo(pDC, x, y);
DeleteObject(Pen);
FINALLY
ImgReleaseDC;
END;
end;
оставляем:
#pas
procedure THIImg_Point._Set;
begin
TRY
if not ImgGetDC(Val) then exit;
x := Round(x * fScale.x);
y := Round(y * fScale.y);
SetPixelV(pDC, x, y, Color2RGB(ReadInteger(Val,_data_Color,_prop_Color)));
FINALLY
ImgReleaseDC;
END;
end;

Тестировал вот такой схемой: img_point_testsize.sha

на трех разных машинах, везде точка оставалась точкой.
XP 1280x768
XP 1024x768
W7 1920x1080

Файл для обновления hiImg_Point_07_07_2014.zip
карма: 11

0
файлы: 2hiimg_point_07_07_2014.zip [1KB] [172], img_point_testsize.sha [5.3KB] [288]
Разработчик
Ответов: 26164
Рейтинг: 2127
#10: 2014-07-08 02:39:17 ЛС | профиль | цитата
Внес изменения
карма: 22

2
Голосовали:sla8a, Konst
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)