Получение данных изображения с устройства досмотра чемоданов рентгеновского снимка
Мне нужно получить рентгеновский снимок с «рентгеновского досмотрового устройства». Я использую EPI, связанный с устройством, но, к сожалению, он неполный, и я должен сделать этот шаг самостоятельно. Часть руководства: «Сигналы от печатных плат диодной матрицы передаются на печатную плату аналого-цифрового преобразователя по ленточному кабелю. Плата аналого-цифрового преобразователя затем преобразует аналоговые данные от детекторных диодов в цифровые. данные на печатную плату CI, где они обрабатываются и отправляются на компьютер через карту National Instruments. Затем программное обеспечение машины обрабатывает сигналы и создает изображение». Теперь я не знаю, как преобразовать данные диодной матрицы в изображение. Моя первая проблема заключается в том, что я не знаю, сколько этих данных и сколько места они занимают? Когда я пытаюсь прочитать исходные данные, У меня есть только указатель для запуска данных из памяти, но я не знаю, как далеко я должен идти? В следующем коде я установил число 10 для проверки, но независимо от того, насколько оно увеличивается, он все равно печатает данные до 1000 (в методе printbuffer).
void printbuffer(unsigned char* b) {
int i;
cout << hex << setfill('0');
for (i = 0; i < 10; i += 1)
cout << setw(2) << static_cast<int>(b[i]);
cout << dec << endl;
}
void RunTest2(XAPI* x) {
// Show runtime info
cout << "Time for one line is " << x->Get(XAPI_Px_LineTime) << endl;
cout << "Line width is " << x->Get(XAPI_Px_LineWidth) << " bytes" << endl;
// Configure detector
x->Configure();
// Acquisition loop
cout << "Getting 30 buffers of 1000 lines each..." << endl;
x->Start(1000);
int count = 0;
unsigned char* pData;
int ret, t = GetTickCounts();
while ((ret = x->GetBlock(reinterpret_cast<void**>(&pData), 10000))
== XAPI_OK) {
// Display part of block
// DO SOMETHING REAL WITH THE IMAGE DATA HERE
cout << "ret: " << ret << " time: " << GetTickCounts() - t << endl;
printbuffer(pData);
t = GetTickCounts();
// Finished with block
x->ReleaseBlock();
// This example just finishes after 30 buffers
if (++count > 30)
break;
}
// Stop Acquisition
cout << "Stopping... (ret=" << ret << ")" << endl;
x->Stop();
}