powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Квадрат в квадрате или обман aztecgen
11 сообщений из 11, страница 1 из 1
Квадрат в квадрате или обман aztecgen
    #39534422
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые форумчане возник у меня вопрос и ищу я из него решение. Мне нужно сгенерировать 2d-код для последующего считывания сканером. Наткнулся на библиотеку aztecgen. Картинка формируется у меня следующим образом:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
function generateMatrixToimg(data: string, img: TImage): boolean;
var
 matrix: PAGMatrix;
 p: PAGByte;
 x,y: Cardinal;
 rec: TRect;
begin
 Result := False;
 if ag_generate(matrix, PChar(data), Length(Data), nil) = AG_SUCCESS then
 begin
  p := matrix^.data;
  img.Height := matrix^.Height;
  img.Width := matrix^.Width;
  img.canvas.brush.color := clBlack;
  for y := 1 to matrix^.height do
  begin
   for x := 1 to matrix^.width do
   begin
    if p^ <> 0 then
    begin
     rec.Left := x-1;
     rec.top := y-1;
     rec.right := x;
     rec.bottom := y;
     img.canvas.Fillrect(rec);
    end;

    img.refresh;
    img.repaint;
    Application.ProcessMessages;
    Inc(p);
   end;
  end;
  Result := True;
  ag_release_matrix(matrix);
 end;
end;



Код рисуется, но почему то всегда урезанный вдвое. Тут либо думать почему код рисуется неправильно, либо костыльным методом загонять в data двойную строку.
Если использовать двойную строку, хочется хотя бы обрезать лишнее, а для этого нужно вырезать внутренний квадрат из квадрата (см рис). С рисованием у меня тоже не ахти... Поэтому на повестке у меня 2 вопроса:
1) Что не так с функцией рисования?
2) Как вырезать внутрении квадратик и поместить его в TImage - расстояние до него со всех краев одинаковое и равно 1/4 ширины или высоты рисунка. Ширина и высота рисунка не кратна 2
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534425
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Главным образом, использование TImage. Замени на TBitmap.
2. В соответствии с (1) вопрос нужно переформулировать
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534426
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис, ок сейчас попробуем
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534428
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис, не помогло

function generateMatrixToimg(data: string, img: TBitMap): boolean;
var
matrix: PAGMatrix;
p: PAGByte;
x,y: Cardinal;
rec: TRect;
begin
Result := False;
if ag_generate(matrix, PChar(data), Length(Data), nil) = AG_SUCCESS then
begin
p := matrix^.data;
img.Height := matrix^.Height;
img.Width := matrix^.Width;
img.canvas.brush.color := clBlack;
for y := 1 to matrix^.height do
begin
for x := 1 to matrix^.width do
begin
if p^ <> 0 then
begin
rec.Left := x-1;
rec.top := y-1;
rec.right := x;
rec.bottom := y;
img.canvas.Fillrect(rec);
end;

Inc(p);
end;
end;
Result := True;
ag_release_matrix(matrix);
end;
end;

// а ниже через кнопочку создание битмапа вызов функции и присвоение битмапа имеджу

Image.Picture.Bitmap.Assign(img)
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534457
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал даже в тестовом проекте, все равно половину обрезает. Может подскажете по 2-му пути что можно сделать?
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534460
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Может подскажете по 2-му пути что можно сделать?
Дай угадаю: юникодная делфи?

dartveider13
Код: pascal
1.
function generateMatrixToimg(data: ansistring, img: TImage): boolean;
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534462
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, ну да. DelphiXE
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534463
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13,

Какая версия Delphi? Если юникодная, то, сдаётся мне, в этой строке:
Код: pascal
1.
ag_generate(matrix, PChar(data), Length(Data), nil) = AG_SUCCESS

нужно использовать
Код: pascal
1.
Length(Data) * SizeOf(Char)

.
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534464
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,
[offtopic]Как в SRC выделять текст? :)[/offtopic]
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534466
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmandartveider13Может подскажете по 2-му пути что можно сделать?
Дай угадаю: юникодная делфи?

dartveider13
Код: pascal
1.
function generateMatrixToimg(data: ansistring, img: TImage): boolean;



Ептить колотить. И правда Ваша. Так все отлично генерирует.)))) Вот сколько раз натыкаюсь уже на эти стринги... Надо читать матчасть.
Спасибо Вам огромное. Все удачно сформировалось.
...
Рейтинг: 0 / 0
Квадрат в квадрате или обман aztecgen
    #39534470
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpwadman,
[offtopic]Как в SRC выделять текст? :)[/offtopic]
http://www.sql.ru/faq/faq_topic.aspx?fid=202
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Квадрат в квадрате или обман aztecgen
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]