» function imagecreatefrombmp(): Läuft mit allen Bitraten!

CSV Delimiter ermittelnNeuen Thread eröffnenNeue Antwort erstellenRegulärer Ausdruck für Postleitzahl
<1
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52420
Wohnort: Lohmar


Meine eBay-Auktionen:
16.04.2010, 16:12
zitieren

Die Version ist schon besser als die davor:
http://www.phpcs.com/codes/IMAGECREATEFROMBMP-IMAGEBMP_27069.aspx

Die kann soweit alles außer 8 und 16 Bit. Allerdings ist 16 Bit nahe am richtigen Ergebnis. Hier sind nur die Farben falsch, aber das eigentliche Bild erkennt man.

Merke ich mir mal vor für die bisher beste Funktion ohne 16 Bit.



Verfasst am: 19.04.2010, 23:29
zitieren

So ich bin fertig:
http://www.programmierer-forum.de/function-imagecreatefrombmp-welche-variante-laeuft-t143137.htm

Hier hatte ich zwischenzeitlich weiter geschrieben und bin dann nach und nach auf die restlichen Fehlerquellen gekommen, falls es jemanden interessiert ;)
http://www.php.de/php-fortgeschrittene/66974-imagecreatefrombmp-16-bit-bitmaps-mit-palette.html

Verfasst am: 02.03.2015, 21:58
zitieren

Backup von Version 1.00:
mguttEs hat mich 4 Tage Arbeit gekostet, aber ich konnte die Funktion nun wie gewünscht fertigstellen.

if (!function_exists('imagecreatefrombmp')) { function imagecreatefrombmp($filename) {
// version 1.00
if (!($fh = fopen($filename, 'rb'))) {
trigger_error('imagecreatefrombmp: Can not open ' . $filename, E_USER_WARNING);
return false;
}
// read file header
$meta = unpack('vtype/Vfilesize/Vreserved/Voffset', fread($fh, 14));
// check for bitmap
if ($meta['type'] != 19778) {
trigger_error('imagecreatefrombmp: ' . $filename . ' is not a bitmap!', E_USER_WARNING);
return false;
}
// read image header
$meta += unpack('Vheadersize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vcolors/Vimportant', fread($fh, 40));
// read additional 16bit header
if ($meta['bits'] == 16) {
$meta += unpack('VrMask/VgMask/VbMask', fread($fh, 12));
}
// set bytes and padding
$meta['bytes'] = $meta['bits'] / 8;
$meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4)- floor($meta['width'] * $meta['bytes'] / 4)));
if ($meta['decal'] == 4) {
$meta['decal'] = 0;
}
// obtain imagesize
if ($meta['imagesize'] < 1) {
$meta['imagesize'] = $meta['filesize'] - $meta['offset'];
// in rare cases filesize is equal to offset so we need to read physical size
if ($meta['imagesize'] < 1) {
$meta['imagesize'] = @filesize($filename) - $meta['offset'];
if ($meta['imagesize'] < 1) {
trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $filename . '!', E_USER_WARNING);
return false;
}
}
}
// calculate colors
$meta['colors'] = !$meta['colors'] ? pow(2, $meta['bits']) : $meta['colors'];
// read color palette
$palette = array();
if ($meta['bits'] < 16) {
$palette = unpack('l' . $meta['colors'], fread($fh, $meta['colors'] * 4));
// in rare cases the color value is signed
if ($palette[1] < 0) {
foreach ($palette as $i => $color) {
$palette[$i] = $color + 16777216;
}
}
}
// create gd image
$im = imagecreatetruecolor($meta['width'], $meta['height']);
$data = fread($fh, $meta['imagesize']);
$p = 0;
$vide = chr(0);
$y = $meta['height'] - 1;
$error = 'imagecreatefrombmp: ' . $filename . ' has not enough data!';
// loop through the image data beginning with the lower left corner
while ($y >= 0) {
$x = 0;
while ($x < $meta['width']) {
switch ($meta['bits']) {
case 32:
case 24:
if (!($part = substr($data, $p, 3))) {
trigger_error($error, E_USER_WARNING);
return $im;
}
$color = unpack('V', $part . $vide);
break;
case 16:
if (!($part = substr($data, $p, 2))) {
trigger_error($error, E_USER_WARNING);
return $im;
}
$color = unpack('v', $part);
$color[1] = (($color[1] & 0xf800) >> 8) * 65536 + (($color[1] & 0x07e0) >> 3) * 256 + (($color[1] & 0x001f) << 3);
break;
case 8:
$color = unpack('n', $vide . substr($data, $p, 1));
$color[1] = $palette[ $color[1] + 1 ];
break;
case 4:
$color = unpack('n', $vide . substr($data, floor($p), 1));
$color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F;
$color[1] = $palette[ $color[1] + 1 ];
break;
case 1:
$color = unpack('n', $vide . substr($data, floor($p), 1));
switch (($p * 8) % 8) {
case 0:
$color[1] = $color[1] >> 7;
break;
case 1:
$color[1] = ($color[1] & 0x40) >> 6;
break;
case 2:
$color[1] = ($color[1] & 0x20) >> 5;
break;
case 3:
$color[1] = ($color[1] & 0x10) >> 4;
break;
case 4:
$color[1] = ($color[1] & 0x8) >> 3;
break;
case 5:
$color[1] = ($color[1] & 0x4) >> 2;
break;
case 6:
$color[1] = ($color[1] & 0x2) >> 1;
break;
case 7:
$color[1] = ($color[1] & 0x1);
break;
}
$color[1] = $palette[ $color[1] + 1 ];
break;
default:
trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING);
return false;
}
imagesetpixel($im, $x, $y, $color[1]);
$x++;
$p += $meta['bytes'];
}
$y--;
$p += $meta['decal'];
}
fclose($fh);
return $im;
}}

 1x  bearbeitet
pn email
Gast 
02.03.2015, 21:58
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "function imagecreatefrombmp(): Läuft mit allen Bitraten!" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
<1
Ähnliche BeiträgeRe:
Letzter Beitrag
mkfile function
Hi, diese Funktion erstellt bei Bedarf eine Datei. function mkfile&#40;$filename, $data='', $chmod=0644&#41; &#123; $h = @fopen&#40;$filename, 'w'&#41;; @fwrite&#40;$h,...
[PHP]von mgutt
0
1.362
20.09.2009, 13:25
mgutt
The Pursuit of Function
He Leute ich denke dieses Material gehört mit zu den besten Docu´s die erzählen was JDM eigentlich ist! Ich kann nur sagen es lohnt sich es zu besorgen, nachdem man diese Docu geguckt hat versteht man JDM und den Lebenstil JDM. Ich kann nur sagen ...
von Smooth587
2
329
21.01.2008, 22:29
Smooth587
Warning: mysql_connect() [function.mysql-connect]: Can't con
Ich brauche dringend hilfe. auf [URL=http://imp-rom.wdpt.de/]http://imp-rom.wdpt.de[/URL] kann ich nicht weiterarbeiten, weil die MySQL-Verbindung nicht klappt. Ich hab alles versucht, aber die Daten stimmen und ich weiß nicht, was ich jetzt noch tun...
[Allgemein]von mox9.imp-rom
3
1.977
03.09.2009, 12:19
mox9.imp-rom
Erfahrungen mit Gewindefahrwerk Function & Form Type 1 und Type 2
Hab die SuFu benutzt aber nichts gefunden. Ich bin am überlegen mir so ein Gewindefahrwerk schicken zu lassen. Hat jemand von euch schon mal ein Function & Form Type 1 oder Type 2 in einem ed9 gefahren? Mit was ist das Vergleichbar? Ist es...
von Nudel mid Hack
11
728
05.01.2014, 14:57
SureX
ED9 Daily - form<function - "CRX zero"
Hallo miteinander, manche sollten mich schon aus dem del Sol Bereich kennen, ich bin der Kevin und seit nun fast 4 Jahren Hondaholic. Nach nunmehr 3 Jahren del Sol hab ich mir durch einen glücklichen Zufall den Traumwagen No. 2 erfüllt: einen...
von Onkel Satan
7
576
12.05.2015, 20:12
Onkel Satan
wünsche allen
wünsche allen MaXReVer´n heut abend viel...
von Kolbenring
25
1.251
02.11.2006, 18:49
eRX
ch1 zündausetzer in allen zylindern
Mahlzeit leute hab da ein problem mit meim ch1 motorkontrllleuchte leuchtet hab fehlerausgelesen obd gerät sagt zündaussetzer bei allen zylindern was kan das sein was muss ich da als erstes prüfen?? Bin über jede Antwort glücklich...
von ciwich
4
230
17.11.2014, 08:19
Headshot91
allen ein schönen Männertag
An alle maxrev Männer. Ich wünsche euch einen schönen und flüssigen Männertag;) und lasst die autos danach stehen;) viel...
von hatebreed91
2
143
17.05.2012, 17:36
Andrüha1HGEJ2
US Blinker glimmen an allen Blinkern
Hi, hab grad die us style blinker module drinne... die frontblinker glimmen mit abblendlicht.. einmal habe ich es hinbekommen gehabt das die komplette blinkanlage geglimmt hat.. wie ich dies gemacht habe weiss ich nicht mehr.. kann mir da einer...
von semih37
2
286
31.01.2011, 12:03
RGT
Unterschied zwischen allen Motoren ??
Hey,worin liegt der unterschied zwischen den b,-d,-k,-h.-etc. motoren,und dem y7,y8,z6 und was da alles giebt,und was bedeutet dies alles... Bitte helft mir-bin sehr an honda interessiert Danke im vor hinein Mfg...
von EJ6_JUNKEY_
5
270
29.11.2010, 22:16
Der_Ronny
© 2004 - 2024 www.programmierer-forum.de | Communities | Impressum |