Compare commits

..

No commits in common. "a01eebd240ab20770efc22b60235c6d92420d223" and "7e09d1b4906553995014ddd8aab014b33b91bd4c" have entirely different histories.

25 changed files with 218 additions and 286 deletions

1
.gitignore vendored
View File

@ -3,7 +3,6 @@
libtthimage.a libtthimage.a
cscope.out cscope.out
gmon.out
Lib/foo Lib/foo
Lib/testtga Lib/testtga

View File

@ -1,5 +0,0 @@
# Exploding Vidz for fun and profit.
But du jeu : traiter la séquence d'image complète d'une vidéo live,
sans devoir attendre 107 ans que le job soit fait.

View File

@ -1,9 +0,0 @@
# Contributions
Voici une collection informelle de fonctions diverses et variées contribuées
par moi-même (et peut-être, un jour, d'autres gens...) et qui risquent
bien de n'être **pas très maintenues**, contrairement au reste du *kluge*.
Nous allons commencer par des fonctions inventées lors d'une *n*-ième session
du projet [ExplodeVidz](ExplodeVidz.md).

1
Lib/.gitignore vendored
View File

@ -1,4 +1,3 @@
*.png *.png
cflow.txt

View File

@ -8,7 +8,7 @@ include ../Paramakes.mk
DEPS = ../tthimage.h ../Paramakes.mk Makefile DEPS = ../tthimage.h ../Paramakes.mk Makefile
all: foo testtga t_png testbmp all: foo testtga
#----------------------------------------------------------------- #-----------------------------------------------------------------
@ -178,7 +178,6 @@ OBJECTS = 7seg.o \
warp0.o warp1.o warp2.o \ warp0.o warp1.o warp2.o \
zoom.o zoom.o
# build the static library
../libtthimage.a: $(OBJECTS) ../libtthimage.a: $(OBJECTS)
$(AR) rs $@ $? $(AR) rs $@ $?
$(RANLIB) $@ $(RANLIB) $@

View File

@ -1,4 +1,4 @@
# The tTh image processing library # The tTh image processind library
Ugly software born around 1995 on a MS-Dos 286 computer. Ugly software born around 1995 on a MS-Dos 286 computer.

View File

@ -4,7 +4,7 @@
made by Thierry Boudet, aka "Oulala", aka "Tonton Th". made by Thierry Boudet, aka "Oulala", aka "Tonton Th".
ces fonctions combinent de diverses facons deux images ces fonctions combinent de diverses façons deux images
de memes dimensions. on pourra, par exemple, les utiliser de memes dimensions. on pourra, par exemple, les utiliser
pour comparer deux traitements. pour comparer deux traitements.
*/ */
@ -22,7 +22,7 @@
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* /*
* le parametre 'zak' n'est pas utilise et doit etre mis a 0 * le paramètre 'zak' n'est pas utilisé et doit être mis à 0
*/ */
int Image_combine_lines(Image_Desc *s1, Image_Desc *s2, Image_Desc *d, int Image_combine_lines(Image_Desc *s1, Image_Desc *s2, Image_Desc *d,
int sy, int oy, int zak) int sy, int oy, int zak)
@ -30,11 +30,11 @@ int Image_combine_lines(Image_Desc *s1, Image_Desc *s2, Image_Desc *d,
int foo, x, y, my, r, g, b; int foo, x, y, my, r, g, b;
if (sy == 0) { if (sy == 0) {
fprintf(stderr, "%s: sy is 0 and zak is %d\n", __func__, zak); fprintf(stderr, "Combine Lines: sy is zer0 and zak is %d\n", zak);
return DIVISOR_IS_ZERO; return DIVISOR_IS_ZERO;
} }
if ( (foo=Image_compare_desc(s1, s2)) ) { if ( (foo=Image_compare_desc(s1, s2)) ) {
fprintf(stderr, "%s: sources are differents (%d)\n", __func__, foo); fprintf(stderr, "Combine Lines: sources are differents (%d)\n", foo);
return foo; return foo;
} }
@ -65,7 +65,7 @@ return OLL_KORRECT;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* /*
* le parametre 'zak' n'est pas utilise et doit etre mis a 0 * le paramètre 'zak' n'est pas utilisé et doit être mis à 0
*/ */
int Image_combine_columns(Image_Desc *s1, Image_Desc *s2, Image_Desc *d, int Image_combine_columns(Image_Desc *s1, Image_Desc *s2, Image_Desc *d,
int sx, int ox, int zak) int sx, int ox, int zak)
@ -241,8 +241,8 @@ return OLL_KORRECT;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* /*
* le flag 'yo' decide quelle image sera en haut a droite. * le flag 'yo' decide quelle image sera en haut à droite.
* les parametres p1 & p2 ne sont pas utilises. * les paramètres p1 & p2 ne sont pas utilisés.
*/ */
int Image_combine_diagonale(Image_Desc *s1, Image_Desc *s2, Image_Desc *d, int Image_combine_diagonale(Image_Desc *s1, Image_Desc *s2, Image_Desc *d,
int yo, int p1, int p2) int yo, int p1, int p2)
@ -252,7 +252,7 @@ int x, y, r, g, b;
int vertical, offset; int vertical, offset;
if ( p1 || p2 ) { if ( p1 || p2 ) {
fprintf(stderr, "%s: bad p1 %d or bad p2 %d\n", __func__, p1, p2); fprintf(stderr, "in %s bad p1 %d or bad p2 %d\n", __func__, p1, p2);
} }
if ( (foo=Image_compare_desc(s1, s2)) ) { if ( (foo=Image_compare_desc(s1, s2)) ) {
@ -300,7 +300,6 @@ for (y=0; y<s1->height; y++) {
} }
/* /*
* 30 sept 2008 : est-ce que cette fonction a subi un bon fuzzing ? * 30 sept 2008 : est-ce que cette fonction a subi un bon fuzzing ?
* 9 aout 2024 : non, pas encore ;)
*/ */
return OLL_KORRECT; return OLL_KORRECT;
} }
@ -353,7 +352,7 @@ return OLL_KORRECT;
/* /*
* fonction faite pour le finisseur de DBvsEE * fonction faite pour le finisseur de DBvsEE
* *
* 6 oct 2001: une version qui permettrait de specifier les * 6 oct 2001: une version qui permettrait de spécifier les
* seuils en r,g et b serait assez pratique aussi. * seuils en r,g et b serait assez pratique aussi.
*/ */
int Image_combine_if_not_black(Image_Desc *s1, Image_Desc *s2, Image_Desc *d) int Image_combine_if_not_black(Image_Desc *s1, Image_Desc *s2, Image_Desc *d)

View File

@ -13,35 +13,42 @@
/* /*
* un kludge en chantier. programmation à la 'Gruiik' en vue. * un kludge en chantier. programmation à la 'Gruiik' en vue.
*/ */
int Image_combine_waou(Image_Desc *s1, Image_Desc *s2, Image_Desc *dst, int
Image_combine_waou(Image_Desc *s1, Image_Desc *s2, Image_Desc *dst,
int a, int b, int c, int d) int a, int b, int c, int d)
{ {
int x, y, foo; int x, y, foo;
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %p %p %d : %d %d (%d) )\n", fprintf(stderr, "%s ( %p %p %p %d : %d %d (%d) )\n",
__func__, s1, s2, dst, a, b, c, d); __func__, s1, s2, dst, a, b, c, d);
#endif #endif
if ( (foo=Image_compare_desc(s1, s2)) ) { if ( (foo=Image_compare_desc(s1, s2)) )
{
fprintf(stderr, "%s : sources are differents %d\n", __func__, foo); fprintf(stderr, "%s : sources are differents %d\n", __func__, foo);
return foo; return foo;
} }
if ( (foo=Image_compare_desc(s1, dst)) ) { if ( (foo=Image_compare_desc(s1, dst)) )
{
fprintf(stderr, "%s : destination bad dims %d\n", __func__, foo); fprintf(stderr, "%s : destination bad dims %d\n", __func__, foo);
return foo; return foo;
} }
for (y=0; y<dst->height; y++) { for (y=0; y<dst->height; y++)
for (x=0; x<dst->width; x++) { {
if (d) { for (x=0; x<dst->width; x++)
{
if (d)
{
/* canonical function */ /* canonical function */
(dst->Rpix[y])[x] = (x & (s1->Rpix[y])[x]) | a; (dst->Rpix[y])[x] = (x & (s1->Rpix[y])[x]) | a;
(dst->Gpix[y])[x] = x | b; (dst->Gpix[y])[x] = x | b;
(dst->Bpix[y])[x] = (y & (s2->Rpix[y])[x]) | c; (dst->Bpix[y])[x] = (y & (s2->Rpix[y])[x]) | c;
} }
else { else
{
/* new 9 mars 2010 - ave St Ex */ /* new 9 mars 2010 - ave St Ex */
(dst->Rpix[y])[x] = (x & (s1->Rpix[y])[x]) ^ a; (dst->Rpix[y])[x] = (x & (s1->Rpix[y])[x]) ^ a;
(dst->Gpix[y])[x] = x ^ b; (dst->Gpix[y])[x] = x ^ b;
@ -56,7 +63,8 @@ return FUNC_IS_BETA;
/* /*
* un kludge en chantier. programmation à la 'Gruiik' en vue. * un kludge en chantier. programmation à la 'Gruiik' en vue.
*/ */
int Image_combine_wauo(Image_Desc *s1, Image_Desc *s2, Image_Desc *dst, int
Image_combine_wauo(Image_Desc *s1, Image_Desc *s2, Image_Desc *dst,
int flag) int flag)
{ {
int x, y, foo; int x, y, foo;
@ -64,25 +72,31 @@ int x, y, foo;
if ( flag ) if ( flag )
fprintf(stderr, "Combine Wauo: flag = %d ?\n", flag); fprintf(stderr, "Combine Wauo: flag = %d ?\n", flag);
if ( (foo=Image_compare_desc(s1, s2)) ) { if ( (foo=Image_compare_desc(s1, s2)) )
{
fprintf(stderr, "Combine Wauo: sources are differents %d\n", foo); fprintf(stderr, "Combine Wauo: sources are differents %d\n", foo);
return foo; return foo;
} }
if ( (foo=Image_compare_desc(s1, dst)) ) { if ( (foo=Image_compare_desc(s1, dst)) )
{
fprintf(stderr, "Combine Wauo: destination bad dims %d\n", foo); fprintf(stderr, "Combine Wauo: destination bad dims %d\n", foo);
return foo; return foo;
} }
for (y=1; y<dst->height-1; y++) { for (y=1; y<dst->height-1; y++)
for (x=1; x<dst->width-1; x++) { {
for (x=1; x<dst->width-1; x++)
{
(dst->Rpix[y])[x] = (s1->Rpix[y][x] + s2->Rpix[y][x])/2; (dst->Rpix[y])[x] = (s1->Rpix[y][x] + s2->Rpix[y][x])/2;
if (s1->Rpix[y][x] > s2->Rpix[y][x]) { if (s1->Rpix[y][x] > s2->Rpix[y][x])
{
(dst->Gpix[y])[x] = (s1->Gpix[y])[x]; (dst->Gpix[y])[x] = (s1->Gpix[y])[x];
(dst->Bpix[y])[x] = (s2->Bpix[y])[x]; (dst->Bpix[y])[x] = (s2->Bpix[y])[x];
} }
else { else
{
(dst->Gpix[y])[x] = (s2->Gpix[y])[x]; (dst->Gpix[y])[x] = (s2->Gpix[y])[x];
(dst->Bpix[y])[x] = (s1->Bpix[y])[x]; (dst->Bpix[y])[x] = (s1->Bpix[y])[x];
} }
@ -95,26 +109,31 @@ return OLL_KORRECT;
/* /*
* threshold values (sr, sg, sb) are in the pix range [0..255] * threshold values (sr, sg, sb) are in the pix range [0..255]
*/ */
int Image_combine_seuils(Image_Desc *s1, Image_Desc *s2, Image_Desc *dst, int
Image_combine_seuils(Image_Desc *s1, Image_Desc *s2, Image_Desc *dst,
int sr, int sb, int sg) int sr, int sb, int sg)
{ {
int x, y, foo; int x, y, foo;
int r, g, b; int r, g, b;
if ( (foo=Image_compare_desc(s1, s2)) ) { if ( (foo=Image_compare_desc(s1, s2)) )
{
fprintf(stderr, "Combine Seuils: sources are differents %d\n", foo); fprintf(stderr, "Combine Seuils: sources are differents %d\n", foo);
return foo; return foo;
} }
if ( (foo=Image_compare_desc(s1, dst)) ) { if ( (foo=Image_compare_desc(s1, dst)) )
{
fprintf(stderr, "Combine Seuils: destination bad dims %d\n", foo); fprintf(stderr, "Combine Seuils: destination bad dims %d\n", foo);
return foo; return foo;
} }
sr*=2; sg*=2; sb*=2; sr*=2; sg*=2; sb*=2;
for (y=0; y<dst->height; y++) { for (y=0; y<dst->height; y++)
for (x=0; x<dst->width; x++) { {
for (x=0; x<dst->width; x++)
{
if ( (s1->Rpix[y][x] + s2->Rpix[y][x]) > sr ) if ( (s1->Rpix[y][x] + s2->Rpix[y][x]) > sr )
r = s1->Rpix[y][x]; r = s1->Rpix[y][x];
else else

View File

@ -1,15 +0,0 @@
/*
* Egalisation par cumul d'histogramme
* ===================================
*
* new: Sat Aug 10 14:38:01 UTC 2024, aux Bourtoulots
*/
#include <stdio.h>
#include <math.h>
#include "../tthimage.h"
/*::------------------------------------------------------------------::*/

View File

@ -145,7 +145,7 @@ Image_TGA_save("Pictures/aaaa-luminance-128.tga", dst, 0);
foo = Image_luminance(src, dst, 200); foo = Image_luminance(src, dst, 200);
Image_TGA_save("Pictures/aaaa-luminance-200.tga", dst, 0); Image_TGA_save("Pictures/aaaa-luminance-200.tga", dst, 0);
foo = Image_luminance(src, dst, 500); foo = Image_luminance(src, dst, 500);
if (foo) Image_print_error((char *)__func__, foo); if (foo) Image_print_error(__func__, foo);
Image_TGA_save("Pictures/aaaa-luminance-500.tga", dst, 0); Image_TGA_save("Pictures/aaaa-luminance-500.tga", dst, 0);
@ -471,6 +471,7 @@ int rotule, foo;
Image_Desc *origine, *imgtmp; Image_Desc *origine, *imgtmp;
char chaine[100]; char chaine[100];
int filtre[11]; int filtre[11];
int w3, h3;
Image_Rect rect; Image_Rect rect;
static int datas_sobel[] = static int datas_sobel[] =
@ -512,6 +513,9 @@ printf("image originale @ %p\n", origine);
imgtmp = Image_clone(origine, 1); imgtmp = Image_clone(origine, 1);
w3 = origine->width * 3;
h3 = origine->height * 3;
if (flags) memcpy(filtre, datas_prewitt, sizeof(filtre)); if (flags) memcpy(filtre, datas_prewitt, sizeof(filtre));
else memcpy(filtre, datas_sobel, sizeof(filtre)); else memcpy(filtre, datas_sobel, sizeof(filtre));
@ -834,29 +838,23 @@ return 42;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* new 24 avril 2007, essais sur le module rgbmask.c */ /* new 24 avril 2007, essais sur le module rgbmask.c */
int Test_RGBmask(char *srcname) int
Test_rgbmask(char *srcname)
{ {
Image_Desc *source, *image ; Image_Desc *source, *image ;
int foo; int foo;
fprintf(stderr, "=============== %s on %s ==============\n", __func__, srcname);
source = Image_TGA_alloc_load(srcname); source = Image_TGA_alloc_load(srcname);
image = Image_clone(source, 0); image = Image_clone(source, 0);
foo = Image_rgbmask_H(source, image, 0); foo = Image_rgbmask_H(source, image, 0);
Image_TGA_save("aaaa-rgbmaskH.tga", image, 0); Image_TGA_save("Pictures/aaaa-rgbmaskH.tga", image, 0);
foo = Image_rgbmask_V(source, image, 0); foo = Image_rgbmask_V(source, image, 0);
Image_TGA_save("aaaa-rgbmaskV.tga", image, 0); Image_TGA_save("Pictures/aaaa-rgbmaskV.tga", image, 0);
foo = Image_rgbmask_2(source, image, 0); foo = Image_rgbmask_2(source, image, 0);
Image_TGA_save("aaaa-rgbmask2.tga", image, 0); Image_TGA_save("Pictures/aaaa-rgbmask2.tga", image, 0);
foo = Image_rgbmask_R(source, image, 0); foo = Image_rgbmask_R(source, image, 0);
Image_TGA_save("aaaa-rgbmaskR.tga", image, 0); Image_TGA_save("Pictures/aaaa-rgbmaskR.tga", image, 0);
Image_DeAllocate(source); free(source);
Image_DeAllocate(image); free(image);
return 42; return 42;
} }
@ -1057,45 +1055,13 @@ Image_DeAllocate(finale); free(finale);
return 0; return 0;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* new: Sat Aug 10 15:32:01 UTC 2024 */ int
int Essai_Televisions(char *nomsource, int k) Test_Egalisations(char *nomsource, int k)
{
Image_Desc *image, *resultat;
int foo;
fprintf(stderr, "================ Televisions %s %d ========\n", nomsource, k);
image = Image_TGA_alloc_load(nomsource);
printf("%s : image loaded %p\n", __func__, image);
resultat = Image_clone(image, 0);
printf("%s : image cloned %p\n", __func__, resultat);
foo = Image_TV_old(image, resultat, 127, 127, 127);
printf("\tTV old -> %d\n", foo);
Image_TGA_save("aaaa_tv_old.tga", resultat, 0);
foo = Image_TV_pix_0(image, resultat, 7, 7, 0);
printf("\tTV pix 0 -> %d\n", foo);
Image_TGA_save("aaaa_tv_pix_0.tga", resultat, 0);
foo = Image_TV_cplus_v1(image, resultat, 7);
printf("\tTV cplus v1 -> %d\n", foo);
Image_TGA_save("aaaa_tv_cplusV1.tga", resultat, 0);
Image_DeAllocate(image); free(image);
Image_DeAllocate(resultat); free(resultat);
return FULL_NUCKED;
}
/*::------------------------------------------------------------------::*/
int Test_Egalisations(char *nomsource, int k)
{ {
Image_Desc *image, *deuxieme, *troisieme; Image_Desc *image, *deuxieme, *troisieme;
int x, y; int x, y;
fprintf(stderr, "================ Egalisations %s %d =====\n", nomsource, k); fprintf(stderr, "============= Egalisations %s %d =====\n", nomsource, k);
image= Image_TGA_alloc_load(nomsource); image= Image_TGA_alloc_load(nomsource);
printf("image loaded %p\n", image); printf("image loaded %p\n", image);
@ -1108,18 +1074,19 @@ troisieme = Image_clone(image, 0);
printf("image 3 cloned %p\n", troisieme); printf("image 3 cloned %p\n", troisieme);
Image_egalise_RGB(image, troisieme, 0); Image_egalise_RGB(image, troisieme, 0);
for (x=0; x<image->width; x++) { for (x=0; x<image->width; x++)
if (x < image->width/3) { {
for (y=0; y<image->height; y++) { if (x < image->width/3)
{
for (y=0; y<image->height; y++)
Image_pixel_copy(image, x, y, troisieme, x, y); Image_pixel_copy(image, x, y, troisieme, x, y);
} }
}
else else
if (x > image->width/3*2) { if (x > image->width/3*2)
for (y=0; y<image->height; y++) { {
for (y=0; y<image->height; y++)
Image_pixel_copy(deuxieme, x, y, troisieme, x, y); Image_pixel_copy(deuxieme, x, y, troisieme, x, y);
} }
}
#if DEBUG_LEVEL > 2 #if DEBUG_LEVEL > 2
printf("%4d\r", x); fflush(stdout); printf("%4d\r", x); fflush(stdout);
@ -1128,7 +1095,7 @@ for (x=0; x<image->width; x++) {
printf("saving resultat...\n"); printf("saving resultat...\n");
Image_marque_1(troisieme, "Egalisations", 0); Image_marque_1(troisieme, "Egalisations", 0);
Image_TGA_save("aaaa_egal.tga", troisieme, 0); Image_TGA_save("Pictures/aaaa_egal.tga", troisieme, 0);
Image_DeAllocate(image); free(image); Image_DeAllocate(image); free(image);
Image_DeAllocate(deuxieme); free(deuxieme); Image_DeAllocate(deuxieme); free(deuxieme);
Image_DeAllocate(troisieme); free(troisieme); Image_DeAllocate(troisieme); free(troisieme);
@ -1136,30 +1103,30 @@ Image_DeAllocate(troisieme); free(troisieme);
return 42; return 42;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
int Test_Dithering(char *nomsource, int k) int
Test_Dithering(char *nomsource, int k)
{ {
Image_Desc *source, *image, *deuxieme, *finale; Image_Desc *source, *image, *deuxieme, *finale;
Image_Rect rect; Image_Rect rect;
int foo, wf, hf; int foo;
int x2, y2; int x2, y2;
RGBA ink, pap; RGBA ink, pap;
fprintf(stderr, "============== Dithering on %s (%d) =======\n", nomsource, k); fprintf(stderr, "========== Dithering on %s (%d) =======\n", nomsource, k);
source = Image_TGA_alloc_load(nomsource); source = Image_TGA_alloc_load(nomsource);
if (NULL == source) { if (NULL == source)
{
fprintf(stderr, "%s:%s err load %s\n", __FILE__, __func__, nomsource); fprintf(stderr, "%s:%s err load %s\n", __FILE__, __func__, nomsource);
exit(5); exit(5);
} }
#if DEBUG_LEVEL
Image_dump_descriptor(source, "just after load"); Image_dump_descriptor(source, "just after load");
#endif
/* /*
* est-ce bien necessaire ? * est-ce bien necessaire ?
*/ */
/* Image_egalise_RGB(source, source, 0); */ /* Image_egalise_RGB(source, source, 0); */
wf = source->width; hf = (source->height) * 4;
x2 = source->width / 2; y2 = source->height / 2; x2 = source->width / 2; y2 = source->height / 2;
rect.w = x2; rect.h = y2; rect.w = x2; rect.h = y2;
rect.x = 0; rect.y = 0; rect.x = 0; rect.y = 0;
@ -1167,22 +1134,24 @@ rect.x = 0; rect.y = 0;
ink.r = 255, ink.g = 255, ink.b = 100; ink.a = 255; ink.r = 255, ink.g = 255, ink.b = 100; ink.a = 255;
pap.r = 30, pap.g = 30, pap.b = 155; pap.a = 255; pap.r = 30, pap.g = 30, pap.b = 155; pap.a = 255;
finale = Image_alloc(wf, hf, 3); finale = Image_alloc(source->width, (source->height)*3, 3);
if (NULL == finale) { if (NULL == finale)
{
fprintf(stderr, "%s:%s:%d err alloc image\n", fprintf(stderr, "%s:%s:%d err alloc image\n",
__FILE__, __func__, __LINE__); __FILE__, __func__, __LINE__);
exit(5); exit(5);
} }
Image_clear(finale, 0, 200, 0); printf("image finale allocated %p\n", finale);
printf("image finale %dx%d allocated at %p\n", wf, hf, finale);
image = Image_MakeHalfSize(source, 0); image = Image_MakeHalfSize(source, 0);
if (NULL == image) { if (NULL == image)
{
fprintf(stderr, "%s:%s:%d err halfsize image\n", fprintf(stderr, "%s:%s:%d err halfsize image\n",
__FILE__, __func__, __LINE__); __FILE__, __func__, __LINE__);
exit(5); exit(5);
} }
printf("%s: image Half at %p\n", __func__, image);
printf("image Half -> %p\n", image);
Image_DeAllocate(source); free(source); Image_DeAllocate(source); free(source);
Image_copy_rect(image, &rect, finale, 0, 0); Image_copy_rect(image, &rect, finale, 0, 0);
@ -1228,20 +1197,17 @@ Image_txt1_box_0(finale, "3x3 2", x2, y2*3, 4, &pap, &ink, 0);
foo = Image_dither_bayer8x8rnd(image, deuxieme, 5000, 0); foo = Image_dither_bayer8x8rnd(image, deuxieme, 5000, 0);
printf("retour Dither bayer8x8rnd = %d\n", foo); printf("retour Dither bayer8x8rnd = %d\n", foo);
Image_copy_rect(deuxieme, &rect, finale, x2, y2*4); Image_copy_rect(deuxieme, &rect, finale, x2, y2*4);
Image_txt1_box_0(finale, "bayer8xrnd rgb", x2, y2*4, 4, &pap, &ink, 0); Image_txt1_box_0(finale, "bayer 8x8 rnd rgb", x2, y2*4, 4, &pap, &ink, 0);
foo = Image_dither_bayer8x8rnd(image, deuxieme, 5000, 1); foo = Image_dither_bayer8x8rnd(image, deuxieme, 5000, 1);
printf("retour Dither bayer8x8rnd = %d\n", foo); printf("retour Dither bayer8x8rnd = %d\n", foo);
Image_copy_rect(deuxieme, &rect, finale, 0, y2*4); Image_copy_rect(deuxieme, &rect, finale, 0, y2*4);
Image_txt1_box_0(finale, "bayer 8x8 rnd grey", 0, y2*4, 4, &pap, &ink, 0); Image_txt1_box_0(finale, "bayer 8x8 rnd grey", 0, y2*4, 4, &pap, &ink, 0);
printf("++++++ test dither\n"); Image_TGA_save("Pictures/aaaa_dithering.tga", finale, 0);
Image_dump_descriptor(finale, "just before save");
Image_TGA_save("aaaa_dithering.tga", finale, 0);
Image_DeAllocate(image); free(image); Image_DeAllocate(image); free(image);
Image_DeAllocate(deuxieme); free(deuxieme); Image_DeAllocate(deuxieme); free(deuxieme);
Image_DeAllocate(finale); free(finale); Image_DeAllocate(finale); free(finale);
printf("++++++ fin essais dither\n");
return 0; return 0;
} }
@ -1260,7 +1226,8 @@ return -1;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* new 21 juillet 2007 - ave St Exupery */ /* new 21 juillet 2007 - ave St Exupery */
int Test_Effects_A(char *nomsource, int flag) int
Test_Effects_A(char *nomsource, int flag)
{ {
Image_Desc *source, *image, *deuxieme, *finale; Image_Desc *source, *image, *deuxieme, *finale;
int foo; int foo;
@ -1269,7 +1236,8 @@ RGBA ink, pap;
printf("=== %s %s === %s === %d ===\n", __FILE__, __func__, nomsource, flag); printf("=== %s %s === %s === %d ===\n", __FILE__, __func__, nomsource, flag);
if (flag) { if (flag)
{
fprintf(stderr, "%s: flag is %d ?\n", __func__, flag); fprintf(stderr, "%s: flag is %d ?\n", __func__, flag);
} }
@ -1277,7 +1245,8 @@ ink.r = 255, ink.g = 255, ink.b = 100; ink.a = 255;
pap.r = 30, pap.g = 30, pap.b = 155; pap.a = 255; pap.r = 30, pap.g = 30, pap.b = 155; pap.a = 255;
source = Image_TGA_alloc_load(nomsource); source = Image_TGA_alloc_load(nomsource);
if (NULL==source) { if (NULL==source)
{
fprintf(stderr, "%s : il manque '%s'\n", __func__, nomsource); fprintf(stderr, "%s : il manque '%s'\n", __func__, nomsource);
exit(1); exit(1);
} }
@ -1377,28 +1346,30 @@ int Test_des_filtres(char *srcname, int k)
Image_Desc *src, *dst; Image_Desc *src, *dst;
int foo; int foo;
printf("=============== LES FILTRES =====[ %s ]====[ %d ]====\n", srcname, k); printf("======= LES FILTRES ===[ %s ]==[ %d ]====\n", srcname, k);
src = Image_TGA_alloc_load(srcname); src = Image_TGA_alloc_load(srcname);
if (NULL == src) { if (NULL == src)
{
fprintf(stderr, "%s can't load %s\n", __func__, srcname); fprintf(stderr, "%s can't load %s\n", __func__, srcname);
return 666; return 666;
} }
dst = Image_clone(src, 1); dst = Image_clone(src, 1);
if (NULL == dst) { if (NULL == dst)
{
fprintf(stderr, "mem failure in %s\n", __func__); fprintf(stderr, "mem failure in %s\n", __func__);
abort(); abort();
} }
foo = Image_lissage_3x3(src, dst); foo = Image_lissage_3x3(src, dst);
Image_TGA_save("filtre-liss3x3.tga", dst, 0); Image_TGA_save("Pictures/filtre-liss3x3.tga", dst, 0);
if (foo) { fprintf(stderr, "%s: liss3x3 -> %d\n", __func__, foo); } if (foo) { fprintf(stderr, "%s: liss3x3 -> %d\n", __func__, foo); }
foo = Image_filtre_Prewitt(src, dst, 5); foo = Image_filtre_Prewitt(src, dst, 5);
Image_TGA_save("filtre-prewitt-5.tga", dst, 0); Image_TGA_save("Pictures/filtre-prewitt-5.tga", dst, 0);
foo = Image_filtre_passe_haut(src, dst); foo = Image_filtre_passe_haut(src, dst);
Image_TGA_save("filtre-passe-haut.tga", dst, 0); Image_TGA_save("Pictures/filtre-passe-haut.tga", dst, 0);
foo = Image_filtre_Sobel_4(src, dst, 0); foo = Image_filtre_Sobel_4(src, dst, 0);
Image_TGA_save("filtre-sobel-4.tga", dst, 0); Image_TGA_save("Pictures/filtre-sobel-4.tga", dst, 0);
Image_DeAllocate(src); free(src); Image_DeAllocate(src); free(src);
Image_DeAllocate(dst); free(dst); Image_DeAllocate(dst); free(dst);

View File

@ -44,7 +44,7 @@ int Test_des_df3(char *txt, int k);
int Test_vignettes(char *srcname, int k); int Test_vignettes(char *srcname, int k);
int Test_classif(char *srcname, int k); int Test_classif(char *srcname, int k);
int Test_RGBmask(char *srcname); int Test_rgbmask(char *srcname);
void Test_rgb2xyz(void); void Test_rgb2xyz(void);
int Essai_des_marquages(char *srcname, int nombre, char *texte); int Essai_des_marquages(char *srcname, int nombre, char *texte);
@ -68,7 +68,7 @@ int Test_des_pixeliz(char *srcname, int flags);
int Essai_des_bitblt(char *srcname, int k); int Essai_des_bitblt(char *srcname, int k);
int Essai_des_gadgrect(char *srcname, int k); int Essai_des_gadgrect(char *srcname, int k);
int Essai_Televisions(char *source, int k); int Essai_Television(char *source, int k);
/* dans essais2;c */ /* dans essais2;c */
int Essai_des_big_chars(char *fname, int k); int Essai_des_big_chars(char *fname, int k);

View File

@ -2,7 +2,7 @@
pov_hf15e.c pov_hf15e.c
=========== ===========
operations de morphologie mathematique appliquees opérations de morphologie mathématique appliquées
aux height-fields. aux height-fields.
*/ */
@ -18,30 +18,40 @@ static struct
int x, y; int x, y;
} off[] = } off[] =
{ {
{ -1, -1 }, { 0, -1 }, { 1, -1 }, { -1, -1 },
{ -1, 0 }, { 0, 0 }, { 1, 0 }, { 0, -1 },
{ -1, 1 }, { 0, 1 }, { 1, 1 } { 1, -1 },
{ -1, 0 },
{ 0, 0 },
{ 1, 0 },
{ -1, 1 },
{ 0, 1 },
{ 1, 1 }
}; };
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* /*
* le parametre 'coef' n'est pas utilise. D'ailleurs, je ne vois * le paramètre 'coef' n'est pas utilisé. D'ailleurs, je ne vois
* pas trop quoi y mettre ? * pas trop quoi y mettre ?
*/ */
int Image_hf15_dilate(Image_Desc *src, Image_Desc *dst, int coef) int
Image_hf15_dilate(Image_Desc *src, Image_Desc *dst, int coef)
{ {
(void)coef; /* KILL WARNING */
int foo; int foo;
int x, y, h, hmax; int x, y, h, hmax;
if ( (foo=Image_compare_desc(src, dst)) ) { if ( (foo=Image_compare_desc(src, dst)) )
{
fprintf(stderr, "Image hf15 dilate: images differents %d\n", foo); fprintf(stderr, "Image hf15 dilate: images differents %d\n", foo);
return foo; return foo;
} }
for (y=1; y<dst->height-1; y++) { for (y=1; y<dst->height-1; y++)
for (x=1; x<dst->width-1; x++) { {
for (x=1; x<dst->width-1; x++)
{
hmax = -1664; hmax = -1664;
for (foo=0; foo<9; foo++) { for (foo=0; foo<9; foo++)
{
h = Image_hf15_height(src, x+off[foo].x, y+off[foo].y); h = Image_hf15_height(src, x+off[foo].x, y+off[foo].y);
if (h > hmax) hmax = h; if (h > hmax) hmax = h;
} }
@ -53,23 +63,27 @@ return FUNC_IS_BETA;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* /*
* le parametre 'coef' n'est pas utilise. * le paramètre 'coef' n'est pas utilisé.
*/ */
int Image_hf15_erode(Image_Desc *src, Image_Desc *dst, int coef) int
Image_hf15_erode(Image_Desc *src, Image_Desc *dst, int coef)
{ {
(void)coef; /* KILL WARNING */
int foo; int foo;
int x, y, h, hmin; int x, y, h, hmin;
if ( (foo=Image_compare_desc(src, dst)) ) { if ( (foo=Image_compare_desc(src, dst)) )
{
fprintf(stderr, "Image hf15 erode: images differents %d\n", foo); fprintf(stderr, "Image hf15 erode: images differents %d\n", foo);
return foo; return foo;
} }
for (y=1; y<dst->height-1; y++) { for (y=1; y<dst->height-1; y++)
for (x=1; x<dst->width-1; x++) { {
for (x=1; x<dst->width-1; x++)
{
hmin = 42042; hmin = 42042;
for (foo=0; foo<9; foo++) { for (foo=0; foo<9; foo++)
{
h = Image_hf15_height(src, x+off[foo].x, y+off[foo].y); h = Image_hf15_height(src, x+off[foo].x, y+off[foo].y);
if (h < hmin) hmin = h; if (h < hmin) hmin = h;
} }
@ -81,7 +95,7 @@ return FUNC_IS_BETA;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/* /*
* Et maintenant, il reste a coder le chapeau haut-de-forme * Et maintenant, il reste à coder le chapeau haut-de-forme
*/ */
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/

View File

@ -27,8 +27,7 @@ Image_Rect rect;
int h1, h2, w1, w2, xx, yy, foo; int h1, h2, w1, w2, xx, yy, foo;
int mr, mg, mb, dr, dg, db, s; int mr, mg, mb, dr, dg, db, s;
level++; /* pourquoi ? */ level++;
if (level > maxlevel) if (level > maxlevel)
maxlevel = level; maxlevel = level;
@ -38,16 +37,10 @@ fprintf(stderr, "%5d -> %3d %3d %3d %3d\n",
#endif #endif
foo = Image_stats_zone_0(S, pRect, &mr, &mg, &mb, &dr, &dg, &db); foo = Image_stats_zone_0(S, pRect, &mr, &mg, &mb, &dr, &dg, &db);
if (foo) {
fprintf(stderr, "%s: err stat zone %d\n", __func__, foo);
exit(1);
}
s = (dr + dg + db) / 3; s = (dr + dg + db) / 3;
#if DEBUG_LEVEL > 1
#if 1 printf(" %7d V %3d %3d %3d D %3d %3d %3d S %3d (%d)\n",
printf(" %7d V %3d %3d %3d D %3d %3d %3d S %3d\n", pRect->w*pRect->h, mr, mg, mb, dr, dg, db, s, foo);
pRect->w*pRect->h, mr, mg, mb, dr, dg, db, s);
#endif #endif
if ( (s < seuil) || (pRect->w < 6) || (pRect->h < 6) ) { if ( (s < seuil) || (pRect->w < 6) || (pRect->h < 6) ) {
@ -125,10 +118,6 @@ int Image_call_recursion_0(Image_Desc *image, Image_Desc *dest, int param)
Image_Rect rect; Image_Rect rect;
int foo; int foo;
#if 1
fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, image, dest, param);
#endif
rect.x = rect.y = 0; rect.x = rect.y = 0;
rect.h = image->height; rect.h = image->height;
rect.w = image->width; rect.w = image->width;
@ -148,7 +137,7 @@ fprintf(stderr, "-> fin recursion: %d, maxlevel=%d\n", foo, maxlevel);
dest->modified = 1; dest->modified = 1;
return FUNC_IS_BETA; return FUNC_IS_ALPHA;
} }
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/

View File

@ -16,20 +16,25 @@
/* /*
* horizontal lines * horizontal lines
*/ */
int Image_rgbmask_H(Image_Desc *src, Image_Desc *dst, int gris) int
Image_rgbmask_H(Image_Desc *src, Image_Desc *dst, int gris)
{ {
int foo, x, y; int foo, x, y;
if ( (foo=Image_compare_desc(src, dst)) ) { if ( (foo=Image_compare_desc(src, dst)) )
{
fprintf(stderr, "%s : images are differents %d\n", __func__, foo); fprintf(stderr, "%s : images are differents %d\n", __func__, foo);
return foo; return foo;
} }
Image_copy(src, dst); /* XXX pourquoi cette copie ? */ Image_copy(src, dst); /* XXX pourquoi cette copie ? */
for (y=0; y<src->height; y++) { for (y=0; y<src->height; y++)
for (x=0; x<src->width; x++) { {
switch (y%3) { for (x=0; x<src->width; x++)
{
switch (y%3)
{
case 0: case 0:
Image_plot_channel(dst, 'r', x, y, gris); Image_plot_channel(dst, 'r', x, y, gris);
Image_plot_channel(dst, 'g', x, y, gris); Image_plot_channel(dst, 'g', x, y, gris);
@ -52,19 +57,25 @@ return FUNC_IS_BETA;
/* /*
* vertical lines * vertical lines
*/ */
int Image_rgbmask_V(Image_Desc *src, Image_Desc *dst, int gris) int
Image_rgbmask_V(Image_Desc *src, Image_Desc *dst, int gris)
{ {
int foo, x, y; int foo, x, y;
if ( (foo=Image_compare_desc(src, dst)) ) { if ( (foo=Image_compare_desc(src, dst)) )
{
fprintf(stderr, "Image rgbmask V: images are differents %d\n", foo); fprintf(stderr, "Image rgbmask V: images are differents %d\n", foo);
return foo; return foo;
} }
Image_copy(src, dst); Image_copy(src, dst);
for (y=0; y<src->height; y++) { for (y=0; y<src->height; y++)
for (x=0; x<src->width; x++) { {
switch (x%3) { for (x=0; x<src->width; x++)
{
switch (x%3)
{
case 0: case 0:
Image_plot_channel(dst, 'r', x, y, gris); Image_plot_channel(dst, 'r', x, y, gris);
Image_plot_channel(dst, 'g', x, y, gris); Image_plot_channel(dst, 'g', x, y, gris);
@ -87,21 +98,26 @@ return FUNC_IS_BETA;
/* /*
* sequential dots - _very_ dependant on image dimensions. * sequential dots - _very_ dependant on image dimensions.
*/ */
int Image_rgbmask_2(Image_Desc *src, Image_Desc *dst, int gris) int
Image_rgbmask_2(Image_Desc *src, Image_Desc *dst, int gris)
{ {
int foo, x, y; int foo, x, y;
if ( (foo=Image_compare_desc(src, dst)) ) { if ( (foo=Image_compare_desc(src, dst)) )
{
fprintf(stderr, "Image rgbmask 2: images are differents %d\n", foo); fprintf(stderr, "Image rgbmask 2: images are differents %d\n", foo);
return foo; return foo;
} }
Image_copy(src, dst); Image_copy(src, dst);
foo = 0; foo = 0;
for (y=0; y<src->height; y++) { for (y=0; y<src->height; y++)
for (x=0; x<src->width; x++) { {
for (x=0; x<src->width; x++)
{
foo++; foo++;
switch (foo%3) { switch (foo%3)
{
case 0: case 0:
Image_plot_channel(dst, 'r', x, y, gris); Image_plot_channel(dst, 'r', x, y, gris);
Image_plot_channel(dst, 'g', x, y, gris); Image_plot_channel(dst, 'g', x, y, gris);
@ -124,7 +140,8 @@ return FUNC_IS_BETA;
/* /*
* random dots - VERY BAD RESULTS :( * random dots - VERY BAD RESULTS :(
*/ */
int Image_rgbmask_R(Image_Desc *src, Image_Desc *dst, int gris) int
Image_rgbmask_R(Image_Desc *src, Image_Desc *dst, int gris)
{ {
int foo, x, y; int foo, x, y;
@ -132,16 +149,20 @@ int foo, x, y;
fprintf(stderr, "this function, %s(%d), is very buggy...\n", __func__, gris); fprintf(stderr, "this function, %s(%d), is very buggy...\n", __func__, gris);
#endif #endif
if ( (foo=Image_compare_desc(src, dst)) ) { if ( (foo=Image_compare_desc(src, dst)) )
{
fprintf(stderr, "Image rgbmask R: images are differents %d\n", foo); fprintf(stderr, "Image rgbmask R: images are differents %d\n", foo);
return foo; return foo;
} }
Image_copy(src, dst); Image_copy(src, dst);
for (y=0; y<src->height; y++) { for (y=0; y<src->height; y++)
for (x=0; x<src->width; x++) { {
for (x=0; x<src->width; x++)
{
foo = rand() % 3; /* mmmm pas tres bon :( */ foo = rand() % 3; /* mmmm pas tres bon :( */
switch (foo) { switch (foo)
{
case 0: case 0:
Image_plot_channel(dst, 'r', x, y, gris); Image_plot_channel(dst, 'r', x, y, gris);
Image_plot_channel(dst, 'g', x, y, gris); Image_plot_channel(dst, 'g', x, y, gris);

View File

@ -9,7 +9,8 @@
#include "../tthimage.h" #include "../tthimage.h"
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
int Image_filtre_Sobel_4(Image_Desc *src, Image_Desc *dst, int rotation) int
Image_filtre_Sobel_4(Image_Desc *src, Image_Desc *dst, int rotation)
{ {
static int Sobel[] = static int Sobel[] =
{ {
@ -22,8 +23,6 @@ int filtre[11], foo;
Image_Desc *tmp[4]; Image_Desc *tmp[4];
int x, y, r, g, b; int x, y, r, g, b;
fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, src, dst,rotation);
memcpy(filtre, Sobel, 11*sizeof(int)); memcpy(filtre, Sobel, 11*sizeof(int));
for (foo=0; foo<4; foo++) { for (foo=0; foo<4; foo++) {
@ -51,6 +50,7 @@ for (x=0; x<src->width; x++) {
dst->Bpix[y][x] = b; dst->Bpix[y][x] = b;
} }
} }
dst->modified = 1; dst->modified = 1;
for (foo=0; foo<4; foo++) { for (foo=0; foo<4; foo++) {

View File

@ -123,13 +123,13 @@ xmax = src->width - w; ymax = src->height - h;
ox = (src->width % w) / 2; ox = (src->width % w) / 2;
oy = (src->height % h) / 2; oy = (src->height % h) / 2;
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, "%s : offsets = %d & %d\n", __func__, ox, oy); fprintf(stderr, "%s : offsets = %d %d\n", __func__, ox, oy);
#endif #endif
Image_clear(dst, grey, grey, grey); Image_clear(dst, grey, grey, grey);
for (x=ox; x<(xmax-ox); x+=w) { for (x=ox; x<xmax; x+=w) {
zone.x = x + (w/2); zone.x = x + (w/2);
for (y=oy; y<(ymax-oy); y+=h) { for (y=oy; y<ymax; y+=h) {
zone.y = y + (h/2); zone.y = y + (h/2);
r = src->Rpix[y][x] & 0xfe; r = src->Rpix[y][x] & 0xfe;
g = src->Gpix[y][x] & 0xfe; g = src->Gpix[y][x] & 0xfe;

View File

@ -19,8 +19,6 @@ int w;
Image_Desc *img; Image_Desc *img;
char filename[100], chaine[110]; char filename[100], chaine[110];
fprintf(stderr, "k is %d in %s\n", k, __func__);
Image_load_fnt8x8("libimage.fonte", NULL, 0); Image_load_fnt8x8("libimage.fonte", NULL, 0);
for (w=160; w<180; w++) for (w=160; w<180; w++)

View File

@ -22,9 +22,7 @@ int foo;
fprintf(stderr, ">>> %s ( '%s' ) \n", __func__, filename); fprintf(stderr, ">>> %s ( '%s' ) \n", __func__, filename);
#if 0
foo = try_to_read_a_jpeg_file(filename, &destimg); foo = try_to_read_a_jpeg_file(filename, &destimg);
#endif
return FULL_NUCKED; return FULL_NUCKED;
} }
@ -32,7 +30,7 @@ return FULL_NUCKED;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
char *fichier; char *fichier;
int foo, idx; int foo;
printf("\n========== TestTga %s %s ==========\n", __DATE__, __TIME__); printf("\n========== TestTga %s %s ==========\n", __DATE__, __TIME__);
Image_print_version(2); Image_print_version(2);
@ -41,7 +39,8 @@ Image_print_version(2);
Image_print_sizeof_structs("tth was here"); Image_print_sizeof_structs("tth was here");
#endif #endif
if (argc != 2) { if (argc != 2)
{
printf("no args, using the testfile\n"); printf("no args, using the testfile\n");
fichier = "wou.tga"; fichier = "wou.tga";
} }
@ -53,25 +52,11 @@ else
Image_start_chrono("Essai", 0); Image_start_chrono("Essai", 0);
for (idx=0; idx<1; idx++) {
foo = Test_Egalisations(fichier, 0);
fprintf(stderr, " essai egalisation -> %d\n", foo);
foo = Essai_Televisions(fichier, 10);
fprintf(stderr, " essai televisions -> %d\n", foo);
foo = Test_Dithering(fichier, 0);
fprintf(stderr, " essai dithering -> %d\n", foo);
foo = Test_des_filtres(fichier, 0);
fprintf(stderr, " essai filtres -> %d\n", foo);
foo = Test_RGBmask(fichier);
fprintf(stderr, " essai rgb mask -> %d\n", foo);
fprintf(stderr, "********* %s: fin passe %d\n", argv[0], idx);
}
#if 0
foo = test_du_jpeg_reader("in.jpeg"); foo = test_du_jpeg_reader("in.jpeg");
fprintf(stderr, " essai lecture jpeg -> %d\n", foo); fprintf(stderr, " essai lecture jpeg -> %d\n", foo);
#if 0
foo = Test_Dithering(fichier, 17); foo = Test_Dithering(fichier, 17);
fprintf(stderr, "essai dithering -> %d\n", foo); fprintf(stderr, "essai dithering -> %d\n", foo);
@ -89,7 +74,6 @@ Test_des_warpings(fichier, 17);
foo = Essai_des_Combines(fichier, 17); foo = Essai_des_Combines(fichier, 17);
fprintf(stderr, "essai combine -> %d\n", foo); fprintf(stderr, "essai combine -> %d\n", foo);
foo = Test_Dithering(fichier, 17); foo = Test_Dithering(fichier, 17);
Essai_des_Contrastes(fichier, 0); Essai_des_Contrastes(fichier, 0);

View File

@ -220,8 +220,7 @@ posx = x; posy = y;
for (foo=0; foo<t_texte; foo++) { for (foo=0; foo<t_texte; foo++) {
octet = ptrtxt[foo]; octet = ptrtxt[foo];
if (posx > (im->width-8)) { if (posx > (im->width-8)) {
fprintf(stderr, "%s: can't plot char '%c' at x=%d\n", fprintf(stderr, "can't plot char '%c' at x=%d\n", octet, posx);
__func__, octet, posx);
break; break;
} }
Image_trace_caractere_2(im, priv_fonte, posx, posy, octet, paper, ink); Image_trace_caractere_2(im, priv_fonte, posx, posy, octet, paper, ink);
@ -260,19 +259,23 @@ if ( (code < 0) || (code > 255)) {
paper.r = paper.g = paper.b = 0; paper.r = paper.g = paper.b = 0;
ink.r = ink.g = ink.b = 255; ink.r = ink.g = ink.b = 255;
rect.w = kx, rect.h = ky; rect.w = kx, rect.h = ky;
/* /*
* NEED BOUNDARY CHECK ! * NEED BOUNDARY CHECK !
*/ */
for (foo=0; foo<8; foo++) { /* 8 scan lines */ for (foo=0; foo<8; foo++) /* 8 scan lines */
{
octet = priv_fonte[(code*8)+foo]; octet = priv_fonte[(code*8)+foo];
rect.y = (foo * ky) + y; rect.y = (foo * ky) + y;
for (bar=0; bar<8; bar++) { for (bar=0; bar<8; bar++)
{
rect.x = (bar * kx) + x; rect.x = (bar * kx) + x;
rect.x = ((8-bar)*kx) + x; rect.x = ((8-bar)*kx) + x;
if (octet & 1) { if (octet & 1)
{
Image_paint_rect(im, &rect, 255, 198, 0); Image_paint_rect(im, &rect, 255, 198, 0);
Image_draw_rect(im, &rect, 0, 0, 80); Image_draw_rect(im, &rect, 0, 0, 80);
} }

View File

@ -12,7 +12,7 @@
#include "../tthimage.h" #include "../tthimage.h"
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
#define LIBTGA_VERSION "0.2.43" #define LIBTGA_VERSION "0.2.42"
typedef struct { typedef struct {
uint8_t text_size; uint8_t text_size;
@ -27,9 +27,6 @@ typedef struct {
} Tga_file_header; } Tga_file_header;
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/*
*
*/
int Image_TGA_write_header(FILE *fp, Tga_file_header *head) int Image_TGA_write_header(FILE *fp, Tga_file_header *head)
{ {
fwrite (&head->text_size, 1, 1, fp); fwrite (&head->text_size, 1, 1, fp);
@ -426,8 +423,6 @@ return OLL_KORRECT;
/* new 1er mai 2007 (la france qui bosse tout le temps) */ /* new 1er mai 2007 (la france qui bosse tout le temps) */
int Image_TGA_show_header(char *filename, int flag) int Image_TGA_show_header(char *filename, int flag)
{ {
(void)flag; /* WARNING KILLER */
FILE *fp; FILE *fp;
Tga_file_header header; Tga_file_header header;
int foo; int foo;
@ -448,7 +443,7 @@ if (foo) {
foo = Image_TGA_print_header(&header); foo = Image_TGA_print_header(&header);
if (foo) if (foo)
{ {
fprintf(stderr, "%s: something is wrong\n", __func__); ;
} }
return FUNC_NOT_FINISH; return FUNC_NOT_FINISH;

View File

@ -1,11 +0,0 @@
/*
* TIFF
*
* new Sun Jul 28 10:57:00 UTC 2024
*/
#include <stdio.h>
/*::------------------------------------------------------------------::*/
/*::------------------------------------------------------------------::*/

View File

@ -1,12 +0,0 @@
#!/bin/bash
set -e
SRC="testtga.c essais.c operat.c image.c effects.c tele_2.c calculs.c"
SRC="$SRC dither.c television.c"
FLOW="cflow.txt"
cflow --depth=5 -o $FLOW -m main --number $SRC
less $FLOW

View File

@ -42,7 +42,7 @@ fprintf(stderr, "* TGA incrustator v 0.1.3 [%s] %s \n",
TGA_OUTILS_VERSION, TGA_OUTILS_COPYLEFT); TGA_OUTILS_VERSION, TGA_OUTILS_COPYLEFT);
fprintf(stderr, " compiled %s at %s\n", __DATE__, __TIME__); fprintf(stderr, " compiled %s at %s\n", __DATE__, __TIME__);
fprintf(stderr, "usage:\n\ttga_incrust <orig.tga> <insert.tga> MODE <out.tga>\n"); fprintf(stderr, "usage:\n\ttga_incrust orig insert mode out\n");
if (flag) { if (flag) {
Image_print_version(0); Image_print_version(0);

View File

@ -11,19 +11,13 @@
#include "tga_outils.h" #include "tga_outils.h"
/*::------------------------------------------------------------------::*/ /*::------------------------------------------------------------------::*/
/*
* Print a textual form of a picture, so you can read it
* with a software who can't read TGA files.
* Exemples: Fortran or Basic code, R, the statistic
* software. And maybe you cant write a shell script
* to convert from TGA to PNM :)
*/
int printf_this_picture(Image_Desc *pic, int flag) int printf_this_picture(Image_Desc *pic, int flag)
{ {
int x, y, r, g, b; int x, y, r, g, b;
if (flag) { if (flag) {
/* needed for easy import in Rstats */ /* needed for easy import in R */
printf(" X Y R G B\n"); printf(" X Y R G B\n");
} }
@ -31,7 +25,7 @@ for (y=0; y<pic->height; y++) {
for (x=0; x<pic->width; x++) { for (x=0; x<pic->width; x++) {
printf("%5d %5d ", x, y); printf("%5d %5d ", x, y);
Image_getRGB(pic, x, y, &r, &g, &b); Image_getRGB(pic, x, y, &r, &g, &b);
printf("%3d %3d %3d\n", r, g, b); printf("%4d %4d %4d\n", r, g, b);
} }
} }