webForumDet fria alternativet

GD -> GetPixel ..

Perl & Ruby

2 svar · 356 visningar · startad av jvg

Medlem sedan feb. 20003 inlägg
Frågan#1

Goddagens..

Har ett litet perl-script som "läser in" en PNG bild och konverterar varje pixel i denna bild till en etta resp. nolla. PNG bilden består bara av två färger, svart och grön. Grön blir en nolla och svart en etta.

#!/usr/bin/perl -w
use strict;
use GD;

my $png = 'bild.png';
open(PNG, $png) or die "Kan inte öppna $png: $!";
my $gd = GD::Image->newFromPng(\*PNG) | | 
	die "$png är nog ingen PNG fil..";
close PNG;

my ($width, $height) = $gd->getBounds();

my $bit_string = '';

for (my $x = 0; $x < $width; $x++)
{
	for (my $y = 0; $y < $height; $y++)
	{
		my $index = $gd->getPixel($x, $y);
		my ($r, $g, $b) = $gd->rgb($index);

		if ($g > 2 )
		{
			$bit_string.= '0';
		}
		else
		{
			$bit_string.= '1';
		}
	}
}
print "$bit_string \n";

Problemet är att detta script läser PNG bilden kolumn för kolumn, börjar på pixeln högst upp till vänster och läser den kolumnen. Försätter sedan till nästa kolumn högst upp och läser den. Jag vill att det ska läsa varje rad, börja högst upp till vänster och läsa hela raden sedan hoppa ned till nästa rad och börja längst till vänster osv. Har provat allt (nästan) men det vill inte riktigt..

Några tips?

/jvg

Medlem sedan dec. 19992 555 inlägg
#2

Problemet är att detta script läser PNG bilden kolumn för kolumn, börjar på pixeln högst upp till vänster och läser den kolumnen. Försätter sedan till nästa kolumn högst upp och läser den.

Är ju så dina loopar är uppbyggda. Fungerar det inte att bara byta plats på FOR-looparna?

...

for (my $y = 0; $y < $height; $y++)
{
for (my $x = 0; $x < $width; $x++)
{
my $index = $gd->getPixel($x, $y);
my ($r, $g, $b) = $gd->rgb($index);

if ($g > 2 )
{
$bit_string.= '0';
}
else
{
$bit_string.= '1';
}
}
}

...

------------------
Robban < robban@lipogram.com >

Medlem sedan feb. 20003 inlägg
#3

Jo.. naturligtvis är det så :r

Tack!

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)