Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
[C++] Pixels[][] (Borland C++ Builder) 20.04.02 00:01 Число просмотров: 1982
Автор: + <Mikhail> Статус: Elderman
|
> Люди, помогите!!! Есть следующее: > > void __fastcall TForm1::Button1Click(TObject *Sender) > { > Graphics::TBitmap *BMP = new Graphics::TBitmap(); > int PicArray [1000][1000]; > BMP->LoadFromFile(str); > > for(int i=0; i<BMP->Width; i++) { > for(int j=0; j<BMP->Height; j++) { > PicArray[i][j] = > (BMP->Canvas->Pixels[i][j])&255; > Application->ProcessMessages(); > } > } > > Image1->Canvas->Draw(0,0,BMP); > } > > Все тормозит. Подскажите (фрагмент кода, если можно): > 1) Как сделать загрузку имиджа в двумерный массив быстрее? > 2)Как завершить работу программы? Как я понял, из-за > ProcessMessages она выходит только по exit(1), обычное > Application->Terminate() не пашет. :(
Zovesh eto Foo:
GetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // array for bitmap bits
LPBITMAPINFO lpbi, // bitmap data buffer
UINT uUsage // RGB or palette index
);
potom copyruesh dannye is lpvBits
Tolko ne ponimau zachem tebe bitmap v 2-D massive ??
|
|
<programming>
|
[C++] Pixels[][] (Borland C++ Builder) 19.04.02 18:31
Автор: tori Статус: Незарегистрированный пользователь
|
Люди, помогите!!! Есть следующее:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *BMP = new Graphics::TBitmap();
int PicArray [1000][1000];
BMP->LoadFromFile(str);
for(int i=0; i<BMP->Width; i++) {
for(int j=0; j<BMP->Height; j++) {
PicArray[i][j] = (BMP->Canvas->Pixels[i][j])&255;
Application->ProcessMessages();
}
}
Image1->Canvas->Draw(0,0,BMP);
}
Все тормозит. Подскажите (фрагмент кода, если можно):
1) Как сделать загрузку имиджа в двумерный массив быстрее?
2)Как завершить работу программы? Как я понял, из-за ProcessMessages она выходит только по exit(1), обычное Application->Terminate() не пашет. :(
|
 |
[C++] Pixels[][] (Borland C++ Builder) 23.04.02 02:00
Автор: vagrant Статус: Незарегистрированный пользователь
|
Во-первых непонятно, зачем тебе столько Application->ProcessMessages();?
Функция может виснуть только от этого миллиона вызовов проверки событий в программе. Ведь сам про себе код совершенно безобиден, на любом компе должен идти доли секунды.
Разве только после BMP->LoadFromFile(str); его воткнуть.
А если функция выполняется не дольше секунды, то и прерывать ее бессмысленно.
А во-вторых по фрагменту непонятно, зачем в этой же функции все рисовать? Если ты и поменял фон (или что там) в картинке, то ее же все равно придется перерисовывать после перекрытия, так что отрисовку имеет смысл куда-то выкинуть.
В третьих, насколько я помню точечная функция очень тормозная вообще всегда!! Проще создать белый битмап того же размера, что и исходный и напрямую их умножить, именно как два объекта.
|
 |  |
[C++] Pixels[][] (Borland C++ Builder) 23.04.02 03:32
Автор: tori Статус: Незарегистрированный пользователь
|
|
А можно немного подробнее ?
|
 |
Сталкивались... 20.04.02 02:40
Автор: Korsh <Мельников Михаил> Статус: Elderman Отредактировано 20.04.02 02:45 Количество правок: 2
|
Но я не использовал 2-Д массивы
на кой хрен они нужны когда у тебя уже битмап готовый
с ним работать гораздо быстрее можно
|
 |
[C++] Pixels[][] (Borland C++ Builder) 20.04.02 00:01
Автор: + <Mikhail> Статус: Elderman
|
> Люди, помогите!!! Есть следующее: > > void __fastcall TForm1::Button1Click(TObject *Sender) > { > Graphics::TBitmap *BMP = new Graphics::TBitmap(); > int PicArray [1000][1000]; > BMP->LoadFromFile(str); > > for(int i=0; i<BMP->Width; i++) { > for(int j=0; j<BMP->Height; j++) { > PicArray[i][j] = > (BMP->Canvas->Pixels[i][j])&255; > Application->ProcessMessages(); > } > } > > Image1->Canvas->Draw(0,0,BMP); > } > > Все тормозит. Подскажите (фрагмент кода, если можно): > 1) Как сделать загрузку имиджа в двумерный массив быстрее? > 2)Как завершить работу программы? Как я понял, из-за > ProcessMessages она выходит только по exit(1), обычное > Application->Terminate() не пашет. :(
Zovesh eto Foo:
GetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // array for bitmap bits
LPBITMAPINFO lpbi, // bitmap data buffer
UINT uUsage // RGB or palette index
);
potom copyruesh dannye is lpvBits
Tolko ne ponimau zachem tebe bitmap v 2-D massive ??
|
 |
[C++] Pixels[][] (Borland C++ Builder) 19.04.02 22:10
Автор: tori Статус: Незарегистрированный пользователь
|
|
Никто с подобным не сталкивался, чтоль? :(
|
 |  |
[C++] Pixels[][] (Borland C++ Builder) 20.04.02 07:41
Автор: tori Статус: Незарегистрированный пользователь
|
|
А можно ли с помощью BitBlt все это делать?
|
|
|