Archiv verlassen und diese Seite im Standarddesign anzeigen : Bild in Array einlesen
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
*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?
*.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.
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
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.
Powered by vBulletin® Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.