Вверх ↑
Этот топик читают: Гость
Ответов: 8926
Рейтинг: 823
#1: 2017-08-28 16:27:03 ЛС | профиль | цитата
Имеется сотня *.bmp картинок 110х110. Очень хочется загнать их в массив Array[0..99, 0..109, 0..109, 0..2] of byte в InLineCode, но побыстрее, чем попиксельным перебором. Как это сделать? Можно-ли картинки открывать в один буфер, а из буфера по линиям перекидывать в массив?
карма: 19

0
Ответов: 497
Рейтинг: 16
#2: 2017-08-29 05:15:38 ЛС | профиль | цитата
нет?


Add(MemoryStream,5867885,462,231)
{
}
Add(BitmapStream,6576058,462,322)
{
link(Stream,12816814:Var2,[])
link(Bitmap,5210389:Bitmap,[(475,314)(482,314)])
}
Add(StreamConvertor,8231586,518,343)
{
Point(Data)
link(Data,12816814:Var3,[(524,292)])
}
Add(GetDataEx,12816814,462,287)
{
link(Data,5867885:Stream,[])
}
Add(Hub,769918,392,322)
{
OutCount=3
link(onEvent1,5867885:doClear,[(434,328)(434,244)])
link(onEvent2,6576058:doWrite,[])
link(onEvent3,8231586:doConvert,[(462,342)(462,349)])
}
Add(Bitmap,5210389,476,273)
{
}

карма: 1
        ]  
0
Ответов: 1926
Рейтинг: 172
#3: 2017-08-29 09:54:14 ЛС | профиль | цитата
Леонид, а для чего 0..2?
карма: 9
0
Ответов: 8926
Рейтинг: 823
#4: 2017-08-29 11:38:15 ЛС | профиль | цитата
3042, 0..2 это три цвета, они мне нужны по отдельности
карма: 19

0
Ответов: 1926
Рейтинг: 172
#5: 2017-08-29 14:43:35 ЛС | профиль | цитата
Ну, вроде это работает (вложение).

Но надо дорабатывать и проверять! Например, в массив 0..2 записывается не RGB, а BGR.
MoveMemory - функция winapi. Указатель на два измерения - @u[i,y] - не уверен, что так можно делать, хотя и работает.

--- Добавлено в 2017-08-29 14:49:51

Вложение.

Редактировалось 3 раз(а), последний 2017-08-29 14:51:04
карма: 9
0
файлы: 1Project11.rar [41KB] [467]
Ответов: 5227
Рейтинг: 587
#6: 2017-08-29 18:11:18 ЛС | профиль | цитата
Леонид, как вариант с директивой absolute и битовой картой, в качестве примера мой компонент GammaColor в разделе компоненты.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 1926
Рейтинг: 172
#7: 2017-08-29 19:09:43 ЛС | профиль | цитата
andrestudio, не нашёл в компоненте http://forum.hiasm.com/topic/66225 директиву absolute.
карма: 9
0
Ответов: 8926
Рейтинг: 823
#8: 2017-08-29 19:10:21 ЛС | профиль | цитата
andrestudio, как раз оба компонента смотрю спасибо!
3042, спасибо!
карма: 19

0
Ответов: 8926
Рейтинг: 823
#9: 2017-08-29 23:38:37 ЛС | профиль | цитата
Заготовку сделал, мою сотню картиночек открывает и заполняет Array за 60 мсек. Спасибо за помощь!
IC


Add(InlineCode,2865515,462,210)
{
@Hint=#14:Картинка 8 бит|
WorkPoints=#9:doReadBMP|6:doWork|
EventPoints=#8:onResult|3:onX|3:onY|5:onEnd|
VarPoints=#6:Result|
DataPoints=#13:Abmp=Картинка|17:NumBmp=№ картинки|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|55: ArrPic:Array[0..99, 0..109, 0..109, 0..2] of byte;|9: public|26: _data_Data:THI_Event;|25: onResult: THI_Event;|20: onX: THI_Event;|20: onY: THI_Event;|22: onEnd: THI_Event;|21: Abmp: THI_Event;|23: NumBmp: THI_Event;|53: procedure doReadBMP(var Data:TData; Index:word);|50: procedure doWork(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|32:procedure THiAsmClass.doReadBMP;|34:type TLine = array[0..0] of byte;|21: PLine = ^TLine;|3:var|17: A_bmp: PBitmap;|13: Line:PLine;|21: _Num,i,j,k:integer;|5:begin|37: _Num:=ReadInteger(Data, NumBmp, 0);|26: if _Num>100 then Exit; |31: A_bmp := Newbitmap(110, 110);|36: A_bmp.Assign(ToBitmapEvent(Abmp));|44: if (A_bmp = nil) or A_bmp.Empty then exit;|31: A_bmp.PixelFormat := pf24bit;|25: for i := 0 to 109 do|11: begin|33: Line := A_bmp.ScanLine[i];|28: for j := 0 to 109 do|14: begin|22: k := j * 3; |51: ArrPic[_Num,i,j,0] := Line[ k ]; //B|51: ArrPic[_Num,i,j,1] := Line[k+1]; //G|51: ArrPic[_Num,i,j,2] := Line[k+2]; //R|12: end;|10: end;|0:|13: A_bmp.free;|4:end;|0:|29:procedure THiAsmClass.doWork;|24:var _Num,i,j,k:integer;|0:|5:begin|38: _Num:=ReadInteger(Data, NumBmp, 0); |21: for i:=0 to 109 do|9: begin|24: for j:=0 to 109 do|12: begin|100: _hi_onEvent(onResult, (ArrPic[_Num,i,j,0]*65536+ArrPic[_Num,i,j,1]*256+ArrPic[_Num,i,j,2]));|28: _hi_onEvent(onX, j);|28: _hi_onEvent(onY, i);|11: end;|8: end;|28: _hi_onEvent(onEnd, _Num); |4:end;|4:end.|
}

карма: 19

0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)