| 
| 
 | Вопрос # 6 621/ вопрос решён / | 
 |  Здравствуйте, уважаемые эксперты!
 ScanLine непонятная штучка, примеров много, объяснений ноль
 Приложение:Переключить в обычный режим  ScanLine procedure LoagIMG(var buffer: TBuf; img: TImage; Name: String);var  x,y,c: integer;  p: pByteArray;begin  img.Picture.LoadFromFile(Name);  img.Picture.Bitmap.PixelFormat:=pf24Bit; // pf8Bit;  SetLength(buffer, img.Height, img.Width);  for y:=0 to img.Height-1 do begin    p:=img.Picture.Bitmap.ScanLine[y];    for x:=0 to img.Width-1 do begin       buffer[y,x]:=c;    end;  end;end;   for y := 0 to BMP1.Height-1 do begin     p:=BMP1.ScanLine[y];     p2:=BMP2.ScanLine[0];     for x := 0 to BMP1.Width-1 do begin         if p[x]=p2[0] then begin           if p[x+1]=p2[1] then begin             if p[x+2]=p2[2] then begin              img1.Canvas.Brush.Color:=0;              img1.Canvas.Ellipse(x,y,x+3,y+3);                Break;             end;           end;         end;      end;end;      
|  |   Вопрос задал: Muxa2016.03 (статус: Посетитель)Вопрос отправлен: 9 апреля 2016, 14:36
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 16; последнее сообщение — 21 апреля 2016, 21:28; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 9 апреля 2016, 14:46 [#1]:у кого код спиздил, к тому и обращайся. а он, похоже, тот ещё извращенец-чикатило.
 
 Цитата (Muxa2016.03): примеров много, объяснений ноль пиздёж.
 от объяснений интернеты аж раздуло. забанили на гугле - юзай хуяндекс.
 
 И ваще, этот сайт давно дохлый. Иди отсюда.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 15:31 [#2]:пива перепил? иди проспись, или помоги или не флуди |  
|   | min@y™ (статус: Доктор наук), 9 апреля 2016, 16:05 [#3]: Цитата (Muxa2016.03): пива перепил? иди проспись, или помоги или не флуди я ж тебе говорю - форум умер давно. нет тут никого.
 я просто бот-автоответчик с планеты шелезяка.
 
 иди отсюда.
 и перестань тырить говнокод из интернетов.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DNK (статус: Студент), 9 апреля 2016, 17:08 [#4]: Цитата: но обломился В чём выражается облом?
 "Digital Networked Knight" |  
|   | 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 (статус: Студент), 9 апреля 2016, 18:16 [#6]:Странно всё это... "Digital Networked Knight" |  
|   | 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 (статус: Посетитель), 9 апреля 2016, 18:28 [#8]:min@y™:  я код не тырил, он лежит в открытом доступе |  
|   | min@y™ (статус: Доктор наук), 9 апреля 2016, 18:47 [#9]: Цитата (Muxa2016.03): зачем shl?  это сдвиг влево в данном случае на 8 и 16 бит - для формирования RGB. Судя по коду, его писал какой-то двоечник, не умеющий работать с указателями и не знающий ни функции move(), ни преобразования типов.
 
 Тырить - это не воровать, а взять. Вместо того, чтобы написать самому. Ну детский сад же.
 
 ФТОПКУ.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 9 апреля 2016, 18:49 [#10]:выкинь это говнище и напиши свой годный код. с нуля! 90% кода в инете - говно.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 9 апреля 2016, 19:23 [#12]: Цитата (Muxa2016.03): а что с нуля писать? велосипед? все это как то странно а, ну ладно тогда. каждый дрочит - как он хочет...
 но и ты меня пойми: я предложил написать своё, чтобы не вылизывать чужое.
 
 Предлагаю начать с чтения мануала к свойству TBitmap.Scanline[Row: Integer], благо таких мануалов с примерами - туева хуча. Я по ним сам учился много лет назад.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Muxa2016.03 (статус: Посетитель), 9 апреля 2016, 19:57 [#13]:min@y™:   да я там почти все пересмотрел, дело в том что я самоучка, читаю и разбираю то что нужно по конкретной теме, ну не все понятно, то что shl это сдвиг, я знаю, но не знаю зачем сдвиги все эти нужны, без них все работает.
 как говорится: "чем проще тем лучше и надежнее"
   
 но все же интересно,а что свое писать? как это понять: написать свое.
 так или иначе все что я напишу, кем то до меня уже было написано миллиард раз, а если бы не тот пример что я приводил выше, "стыриный" и ему подобные  которых полно в тырнете, я бы и не знал что так можно и что вообще такой метод существует. я бы так и продолжал бы юзать перебор пикселей if array1[x,y]=array[0,0] зен бегин, а это точно говно.
 
 ну пока все, я спать... пива много не пей
   |  
|   | 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 (статус: Посетитель), 21 апреля 2016, 18:31 [#15]:DNK: ты фуфло хуле ты лезешь куда тебя не просят!? |  21 апреля 2016, 18:45: Статус вопроса изменён на решённый (изменил автор вопроса — Muxa2016.03) 
|   | DNK (статус: Студент), 21 апреля 2016, 21:28 [#16]:Я папе всё расскажу!   "Digital Networked Knight" |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |