Re: как вытащить картинки из (рисовалки) программы Notepad
Ребят не мучайтесь. вот код, конвертации всех .npd файлов в BMP.
формат npd прост, 14 байт заголовок с размерами, дальше 388(389 всегда мусор) строчек по 272 точки в ряду по три цвета RGB. Чтобы открыть в photoshop, open as -> photoshop raw -> размеры 272 x 388, channels 3, interlived, пропустить 14 байт заголовка...
Код на perl(установите в системе, это такой язык программирования).
Код:
#!/usr/bin/perl
use strict;
use Data::Dumper;
my $bmp_header = join '', map (chr, 0x42,0x4d,0xf6,0xd4,0x04,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x01,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0xc0,0xd4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);
opendir (DIR, ".") || die "$!";
my @files = grep /\.npd$/i, grep !/^\.\.?$/, readdir DIR;
closedir DIR;
foreach my $file (@files) {
my $fn = $file; $fn =~ s/\.npd$/.bmp/i;
open (fo, ">".$fn) || die "$!";
binmode fo;
print fo $bmp_header;
open (fh, "<".$file) || die "$!";
binmode fh;
for(my $i=0; $i<388;$i++) {
seek fh, -((272*3*2)+($i*272*3)), 2;
read fh, my $buf, 272*3;
for(my $c=0;$c<272;$c++) { substr($buf, $c*3+2,1, substr($buf, $c*3, 1, substr($buf, $c*3+2,1))); }
print fo $buf;
}
close fh;
close fo;
}
Ребят не мучайтесь. вот код, конвертации всех .npd файлов в BMP.
формат npd прост, 14 байт заголовок с размерами, дальше 388(389 всегда мусор) строчек по 272 точки в ряду по три цвета RGB. Чтобы открыть в photoshop, open as -> photoshop raw -> размеры 272 x 388, channels 3, interlived, пропустить 14 байт заголовка...
Код на perl(установите в системе, это такой язык программирования).
[spoiler=Код][code]#!/usr/bin/perl
use strict;
use Data::Dumper;
my $bmp_header = join '', map (chr, 0x42,0x4d,0xf6,0xd4,0x04,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x01,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0xc0,0xd4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);
opendir (DIR, ".") || die "$!";
my @files = grep /\.npd$/i, grep !/^\.\.?$/, readdir DIR;
closedir DIR;
foreach my $file (@files) {
my $fn = $file; $fn =~ s/\.npd$/.bmp/i;
open (fo, ">".$fn) || die "$!";
binmode fo;
print fo $bmp_header;
open (fh, "<".$file) || die "$!";
binmode fh;
for(my $i=0; $i<388;$i++) {
seek fh, -((272*3*2)+($i*272*3)), 2;
read fh, my $buf, 272*3;
for(my $c=0;$c<272;$c++) { substr($buf, $c*3+2,1, substr($buf, $c*3, 1, substr($buf, $c*3+2,1))); }
print fo $buf;
}
close fh;
close fo;
}
[/code][/spoiler]