| Tesina universitaria di Teoria e Tecniche di Elaborazione Immagini |
10/01/2004
Oggi, dopo alcune richieste, ho provato a compilare core.c e core.h sotto Windows.
A parte qualche problemino sembra funzionare con le seguenti limitazioni:
- Visual C++ 6.0 segna tutti i cast impliciti;
- l'allineamento delle strutture non deve essere a 8 byte (per tagliare la testa al toro l'ho impostato a 1 byte), mem.h in windows si chiama memory.h).
Il risultato è una applicazione console scritta (come al solito) in gran fretta:
/*
PalletConsole Test
Autore : Mirco Miranda
Data : 10/01/2004
Licenza: GPL
Descrizione: legge il file BMP passato in linea di comando,
vi applica l'algoritmo Canny Edge Detector e
salva il risultato nel file canny.bmp
Note:
1) questo semplice programma e` stato scritto per
testare le librerie core.c e core.h V0.3 sotto Windows
2) bisogna impostare l'allineamento delle strutture dati a
1 byte (forse va bene anche 2), altrimenti e` un macello.
3) in VC mem.h si chiama memory.h
4) ci sono un sacco di cast impliciti... VC di default
li segnala tutti (quindi una marea di warning con
le opzioni di compilazione di default)
5) si, le librerie le riscriverei da zero...
*/
#include "core.h"
int main(int argc, char **argv)
{
BMPIMAGE bmp;
FILE *rd, *wr;
puts("EDGE Detection Demo by Mirco Miranda");
puts("");
puts("Semplice programma per l'edge detection che usa core.c e core.h del progetto pallet per OS/2.");
puts("Scritto per testare le librerie anche sotto Windows.");
puts("");
if(argc != 2) {
puts("Specificare il file BMP da aprire");
return(-4);
}
rd = fopen(argv[1], "rb");
if(rd) {
// teoricamente inutili
bmp.bmph = NULL;
bmp.data = NULL;
bmp.ppal = NULL;
// carico l'immagine
BmpfReadBitmap(rd, &bmp);
fclose(rd);
// per lavorare con canny devo avere un immagine 24bit
if(bmp.bmph->cBitCount != 24) {
puts("L'immagine deve essere a 24 bit");
return(-1);
}
// porto l'immagine in bianco e nero (i bordi
// altrimenti risultano di colori diversi)
FltCol2Gray(bmp.bmph, bmp.ppal, bmp.data);
// applico l'edge detector Canny
FltCannyEdge(bmp.bmph, bmp.ppal, bmp.data);
// salvo l'immagine
wr = fopen("canny.bmp", "wb");
if(wr) {
BmpfWriteBitmap(wr, &bmp);
fclose(wr);
}
else {
puts("Errore scrittura");
return(-2);
}
}
else {
puts("Errore apertura file");
return(-3);
}
// fine, teoricamente OK
return(0);
}
|