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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 6 621

/ вопрос решён /

Здравствуйте, уважаемые эксперты!

ScanLine непонятная штучка, примеров много, объяснений ноль

Приложение:
  1.  
  2. ScanLine
  3.  
  4. procedure LoagIMG(var buffer: TBuf; img: TImage; Name: String);
  5. var
  6. x,y,c: integer;
  7. p: pByteArray;
  8. begin
  9. img.Picture.LoadFromFile(Name);
  10. img.Picture.Bitmap.PixelFormat:=pf24Bit; // pf8Bit;
  11. SetLength(buffer, img.Height, img.Width);
  12. for y:=0 to img.Height-1 do begin
  13. p:=img.Picture.Bitmap.ScanLine[y];
  14. for x:=0 to img.Width-1 do begin
  15.  
  16. buffer[y,x]:=c;
  17. end;
  18. end;
  19. end;
  20.  
  21.  
  22.  
  23. for y := 0 to BMP1.Height-1 do begin
  24. p:=BMP1.ScanLine[y];
  25. p2:=BMP2.ScanLine[0];
  26. for x := 0 to BMP1.Width-1 do begin
  27. if p[x]=p2[0] then begin
  28. if p[x+1]=p2[1] then begin
  29. if p[x+2]=p2[2] then begin
  30. img1.Canvas.Brush.Color:=0;
  31. img1.Canvas.Ellipse(x,y,x+3,y+3);
  32.  
  33. Break;
  34. end;
  35. end;
  36. end;
  37. end;
  38. end;
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  


Muxa2016.03 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Muxa2016.03 (статус: Посетитель)
Вопрос отправлен: 9 апреля 2016, 14:36
Состояние вопроса: решён, ответов: 0.


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

Всего сообщений: 16; последнее сообщение — 21 апреля 2016, 21:28; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 9 апреля 2016, 14:46 [#1]:

у кого код спиздил, к тому и обращайся.
а он, похоже, тот ещё извращенец-чикатило.

Цитата (Muxa2016.03):

примеров много, объяснений ноль

пиздёж.
от объяснений интернеты аж раздуло. забанили на гугле - юзай хуяндекс.

И ваще, этот сайт давно дохлый. Иди отсюда.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 15:31 [#2]:

пива перепил? иди проспись, или помоги или не флуди
min@y™

min@y™ (статус: Доктор наук), 9 апреля 2016, 16:05 [#3]:

Цитата (Muxa2016.03):

пива перепил? иди проспись, или помоги или не флуди

я ж тебе говорю - форум умер давно. нет тут никого.
я просто бот-автоответчик с планеты шелезяка.

иди отсюда.
и перестань тырить говнокод из интернетов.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

DNK (статус: Студент), 9 апреля 2016, 17:08 [#4]:

Цитата:

но обломился

В чём выражается облом?
"Digital Networked Knight"
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 18:01 [#5]:

мгновенный поиск множества картинок
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
type
  Timag = record
    Flag_: boolean;
    BitMap: TBitmap;
    X,Y,Color: integer;
    Bufarr: array of array of Integer;
  end;
type
  TForm1 = class(TForm)
    btn1: TButton;
    img1: TImage;
    lbl1: TLabel;
    btn2: TButton;
    procedure btn1Click(Sender: TObject);
    procedure img1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    function FndIMG(Name:string):integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
implementation
 
{$R *.dfm}
 
procedure TForm1.btn1Click(Sender: TObject);
begin
FndIMG('123.bmp');
FndIMG('234.bmp');
FndIMG('345.bmp');
FndIMG('123.bmp');
FndIMG('Bm2.bmp');
end;
 
 
function TForm1.FndIMG(Name:string): integer;
var
 x,y,c : integer;  A,D:Timag;
 P,PP : PByteArray;
begin
c:=0;
D.BitMap:=TBitmap.Create;
A.BitMap:=img1.Picture.Bitmap;
D.BitMap.LoadFromFile(Name);
A.BitMap.PixelFormat:=pf24bit;
D.BitMap.PixelFormat:=pf24bit;
PP:=D.BitMap.ScanLine[0];
    for y:=0 to A.BitMap.Height-1 do begin
        P:=A.BitMap.ScanLine[y];
        for x:=0 to A.BitMap.Width-1 do begin
 
            if(P[x*3+0]=PP[0]) and
            (P[x*3+1]=PP[0+1]) and
            (P[x*3+2]=PP[0+2]) and
            (P[x*3+3]=PP[0+3]) and
            (P[x*3+4]=PP[0+4]) then begin
            img1.Canvas.Ellipse(x,y,x+D.BitMap.Width,y+D.BitMap.Height);
            FreeAndNil(D.BitMap);
            Exit
            end;
        end;
    end;
if D.BitMap <> nil then FreeAndNil(D.BitMap);
end;
 
procedure TForm1.img1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
btn1.Caption:=IntToStr(x)+' '+IntToStr(y);
end;
 
end.
DNK

DNK (статус: Студент), 9 апреля 2016, 18:16 [#6]:

Странно всё это...
"Digital Networked Knight"
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 18:23 [#7]:

DNK: а поточнее, что странно?

DNK: вы можете объяснить как это работает?
P[y] это вроде как пиксель, зачем его умножать на три?
если не умножать нифига не работает
а еще в примере
 c:=((p[x*3+0] shl 8+p[x*3+1]) shl 8)+p[x*3+2];
зачем shl?
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 18:28 [#8]:

min@y™: я код не тырил, он лежит в открытом доступе
min@y™

min@y™ (статус: Доктор наук), 9 апреля 2016, 18:47 [#9]:

Цитата (Muxa2016.03):

зачем shl?

это сдвиг влево в данном случае на 8 и 16 бит - для формирования RGB. Судя по коду, его писал какой-то двоечник, не умеющий работать с указателями и не знающий ни функции move(), ни преобразования типов.

Тырить - это не воровать, а взять. Вместо того, чтобы написать самому. Ну детский сад же.

ФТОПКУ.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 9 апреля 2016, 18:49 [#10]:

выкинь это говнище и напиши свой годный код. с нуля!
90% кода в инете - говно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 19:14 [#11]:

min@y™: чо такой нервный.
почитал то что по твоей ссылке есть, каждый знает что ему дают наброски,так сказать, которые нужно потом вылизывать, то что я выложил тоже нужно вылизывать. ЭТО ОЧЕВИДНО :-D
я даже подписал что код с мусором ;-)
а что с нуля писать? велосипед? все это как то странно ;-)
min@y™

min@y™ (статус: Доктор наук), 9 апреля 2016, 19:23 [#12]:

Цитата (Muxa2016.03):

а что с нуля писать? велосипед? все это как то странно

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

Предлагаю начать с чтения мануала к свойству TBitmap.Scanline[Row: Integer], благо таких мануалов с примерами - туева хуча. Я по ним сам учился много лет назад.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 19:57 [#13]:

min@y™: да я там почти все пересмотрел, дело в том что я самоучка, читаю и разбираю то что нужно по конкретной теме, ну не все понятно,
то что shl это сдвиг, я знаю, но не знаю зачем сдвиги все эти нужны, без них все работает.
как говорится: "чем проще тем лучше и надежнее" ;-)

но все же интересно,а что свое писать? как это понять: написать свое.
так или иначе все что я напишу, кем то до меня уже было написано миллиард раз, а если бы не тот пример что я приводил выше, "стыриный" и ему подобные которых полно в тырнете, я бы и не знал что так можно и что вообще такой метод существует. я бы так и продолжал бы юзать перебор пикселей if array1[x,y]=array[0,0] зен бегин, а это точно говно.

ну пока все, я спать... пива много не пей ;-)
DNK

DNK (статус: Студент), 9 апреля 2016, 20:15 [#14]:

Muxa2016.03: Умножается на три не пиксель, а индекс массива. (x Shl 8) тоже самое что и (x * $100). Таким образом получается значение $rrggbb.
"Digital Networked Knight"

20 апреля 2016, 19:48: Вопрос закрыт (решение принял DNK): Затрахал уже!!!!

21 апреля 2016, 18:25: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — Muxa2016.03): нехер закрывать вопрос если не ты его открывал!!!

Muxa2016.03

Muxa2016.03 (статус: Посетитель), 21 апреля 2016, 18:31 [#15]:

DNK: ты фуфло хуле ты лезешь куда тебя не просят!?

21 апреля 2016, 18:45: Статус вопроса изменён на решённый (изменил автор вопроса — Muxa2016.03)

DNK

DNK (статус: Студент), 21 апреля 2016, 21:28 [#16]:

Я папе всё расскажу! :-P
"Digital Networked Knight"

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

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