Я пытаюсь отделить данные заголовка и пикселя от растрового файла. Используя следующий код
($bmpHdr1, @bmpData1[0..$bmpSize-1]) = unpack "(H$hdrNibbleLen)(H2)*", $data1;
Прекрасно работает с небольшими файлами, но приводит к нелепому увеличению времени обработки при использовании с большим файлом. Например, растровое изображение размером 16 МБ, на самом деле я никогда не ждал его завершения достаточно долго.
($bmpHdr1, @bmpData1) = unpack "(H$hdrNibbleLen)(H*)", $data1;
работает хорошо, но я получаю все пиксельные данные в первом элементе списка, нужны дополнительные операции с регулярными выражениями, чтобы получить данные в нужном формате. Есть ли способ сделать это только с unpack
?
Ожидаемый результат: упакуйте пиксельные данные с детализацией на уровне байтов и сохраните каждый байт в другом элементе списка.
Реальное ожидание:
Я хочу сравнить два растровых изображения и найти X, Y несовпадающего пикселя и соответствующие данные. Из-за заполнения и разных битов на пиксель (некоторые из них 24 бита на пиксель) поиск несовпадающего пикселя становится кошмаром, если он не разделен на уровне байтов. Ну по крайней мере так, как я это делаю.
my $errPixY = floor($errByte/$rowSize);
my $errPixX = ($errByte - ($errPixY * $rowSize))/($header1{DibHdrBpp}/8);