|
Вопрос # 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"
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|