PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bild in Array einlesen



SleiZer
12.09.2009, 17:04
Kennt jemand eine Funktion oder möglichkeit,
eine Bilddatein in ein c Programm einzulesen und dann die Pixel in einem Array zuspeichern, damit ich die einzelnen Pixel nach ihren rgb-werten auswerten kann?
Oder gibs dafür noch eine einfachere Variante?

blackberry
12.09.2009, 18:13
Geht es hier um den Coding Wettbewerb? ;)

Ich würde dir LibGD empfehlen. ( www.libgd.org )
Dieses Beispiel würde die RGB-Werte von jedem Pixel in dem Bild "dasBild.png" auflisten.


#include <stdio.h>
#include <gd.h>


int main(int argc, char *argv[])
{
gdImagePtr img;
gdImagePtr imgTrueColor;
FILE *fp;
int x;
int y;
int pixel;

if (!(fp = fopen("dasBild.png", "rb")))
{
printf("Fehler: konnte das Bild nicht finden!\n");
return 1;
}
if (!(img = gdImageCreateFromPng(fp)))
{
printf("Fehler: konnte das Bild nicht lesen! [falsches Format??]\n");
return 2;
}
fclose(fp);

for(x = 0; x < img->sx; x++)
{
for(y = 0; y < img->sy; y++)
{
pixel = gdImageGetPixel(img, x, y);
printf(
"P(%d, %d) = RGB(%d, %d, %d)\n",
x, y,
gdImageRed(img, pixel),
gdImageGreen(img, pixel),
gdImageBlue(img, pixel)
);
}
}

return 0;
}


mfG. BlackBerry

SleiZer
12.09.2009, 23:55
*hust* :)
ok, das sieht schonmal nicht schlecht aus, ich kanns leider nicht testen,
da ich LibGD nicht eingebunden kriege...
Naja ich verwende den CC 386IDE Compiler.
Theoretisch würde ich sagen ich binde die "libgd.rc"
aus dem LibGD packet ein und los gehts ... tuts aber nicht.
Kann mir da nochmal einer schnell Nachhilfe geben wie man solche Packete richtig einbindet?

wacked
13.09.2009, 13:43
*.rc ist eine resourcedatei. also das exeicon oder son zeug.
ich würde eher die source (+ header) dateien inkludieren und vielleicht noch die *.lib sachen. Manual von deinem Compiler lesen.

SleiZer
14.09.2009, 18:49
Ich fasse es nicht ...
also entweder bin ich zu blöd die sachen zu includen, oder die funktionen
"gdImageCreateFromPng" und "gdImageGetPixel" nicht in der gd.h!
Mein Compiler gibt mir immer:
"Error: Unresolved External "gdImageCreateFromPng" in Module "C:\contest\rgb.c""
"Error: Unresolved External "gdImageGetPixel" in Module "C:\contest\rgb.c""
warum?!
Aber wo sind die denn sonst?
Gibs nen Tut fürs includen ^^?

blackberry
14.09.2009, 20:01
also entweder bin ich zu blöd die sachen zu includen, oder die funktionen
"gdImageCreateFromPng" und "gdImageGetPixel" nicht in der gd.h!

Ich kann dir versprechen, dass die Funktionen in gd.h sind ;)
Wären sie es nicht würde die Fehlermeldung heißen "undefined function/symbol/whatever".

An deiner Stelle würde ich dem Linker die Datei bgd.lib.
Diese Datei befindet sich in folgendem .ZIP-Archiv:
http://www.libgd.org/releases/gd-latest-win32.zip

im Ordner ./lib/
Weiterhin sollte bgd.dll (im Ordner ./bin/) im selben Verzeichniss wie dein fertiges Programm sein (oder in einem Ordner der in der %PATH% Variable aufgelistet ist).


mfG. BlackBerry

SleiZer
14.09.2009, 20:26
Ich glaube ich brauch ein neuen Compiler...

"Error: Record too long."
"Max record length supported by this linker is 4096bytes"

Ein schönen, mit benutzeroberfläche und so? Quasi für Anfänger?

blackberry
14.09.2009, 20:57
Mir ist kein C/C++ Compiler mit Benutzeroberfläche bekannt.
(bevor mich jemand korriegieren will: es geht um Compiler und nicht um IDE's)

Zu empfehlen wäre Dev-C++ mit MingGW.
Einfach, übersichtlich, effizient.

SleiZer
18.09.2009, 16:09
Aha es tut was!
danke!