/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/04 10:14:39 by ljiriste #+# #+# */
-/* Updated: 2024/04/04 10:36:18 by ljiriste ### ########.fr */
+/* Updated: 2024/04/04 11:40:32 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
# define DIGITEQ_H
# include "libft.h"
+# include <setjmp.h>
+
+# include <stdio.h>
+# include <jpeglib.h>
# define EMOJI_TRESHOLD 255
# define FRAME_THICKNESS 2
+typedef struct s_jpeg_error
+{
+ struct jpeg_error_mgr common;
+ jmp_buf setjmp_buffer;
+} t_jpeg_error;
+
typedef struct s_mlx_session
{
void *mlx;
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/04 10:29:22 by ljiriste #+# #+# */
-/* Updated: 2024/04/04 10:31:33 by ljiriste ### ########.fr */
+/* Updated: 2024/04/04 11:30:16 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
graphics->background.img = mlx_jpeg_file_to_image(graphics->mlx_ses.mlx,
argv[1], &graphics->background.width,
&graphics->background.height);
- graphics->emoji.img = mlx_xpm_file_to_image(graphics->mlx_ses.mlx,
- "emoji.xpm", &graphics->emoji.width, &graphics->emoji.height);
- graphics->red_frame = create_frame_img(graphics->mlx_ses.mlx,
- graphics->emoji.width, graphics->emoji.height, 0x80FF0000);
- graphics->green_frame = create_frame_img(graphics->mlx_ses.mlx,
- graphics->emoji.width, graphics->emoji.height, 0x8000FF00);
+ graphics->emoji.img = mlx_jpeg_file_to_image(graphics->mlx_ses.mlx,
+ argv[2], &graphics->emoji.width,
+ &graphics->emoji.height);
+ if (graphics->emoji.img)
+ {
+ graphics->red_frame = create_frame_img(graphics->mlx_ses.mlx,
+ graphics->emoji.width, graphics->emoji.height, 0x80FF0000);
+ graphics->green_frame = create_frame_img(graphics->mlx_ses.mlx,
+ graphics->emoji.width, graphics->emoji.height, 0x8000FF00);
+ }
res = graphics->background.img && graphics->red_frame.img
&& graphics->green_frame.img && graphics->emoji.img;
if (res)
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/04 10:21:40 by ljiriste #+# #+# */
-/* Updated: 2024/04/04 10:52:14 by ljiriste ### ########.fr */
+/* Updated: 2024/04/04 11:40:47 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "digiteq.h"
#include <mlx.h>
#include <unistd.h>
+#include <setjmp.h>
#include <stdio.h>
#include <jpeglib.h>
return ;
}
+static void my_error_exit(j_common_ptr cinfo)
+{
+ longjmp(((t_jpeg_error *)cinfo->err)->setjmp_buffer, 1);
+}
+
// This function is written as to have
// the same signature as mlx_png_file_to_image
void *mlx_jpeg_file_to_image(void *mlx_ptr, char *filename,
int *width, int *height)
{
struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
+ t_jpeg_error jerr;
FILE *source;
t_mlx_data img;
ft_dprintf(STDERR_FILENO, "Cannot open %s\n", filename);
return (NULL);
}
- cinfo.err = jpeg_std_error(&jerr);
+ cinfo.err = jpeg_std_error(&jerr.common);
+ jerr.common.error_exit = my_error_exit;
+ if (setjmp(jerr.setjmp_buffer))
+ {
+ fclose(source);
+ ft_dprintf(STDERR_FILENO, "%s: ", filename);
+ cinfo.err->output_message((j_common_ptr)(&cinfo));
+ ft_dprintf(STDERR_FILENO, "\n");
+ jpeg_destroy_decompress(&cinfo);
+ return (NULL);
+ }
jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, source);
jpeg_read_header(&cinfo, TRUE);
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/02 08:44:53 by ljiriste #+# #+# */
-/* Updated: 2024/04/04 10:58:21 by ljiriste ### ########.fr */
+/* Updated: 2024/04/04 11:33:20 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
state->graph.mlx_ses.mlx_win = NULL;
state->pos.x = 0;
state->pos.y = 0;
+ state->graph.background.img = NULL;
+ state->graph.emoji.img = NULL;
+ state->graph.red_frame.img = NULL;
+ state->graph.green_frame.img = NULL;
return (ft_vec_init(&state->found, sizeof(t_position)) != success
|| !state->graph.mlx_ses.mlx);
}
int main(int argc, char **argv)
{
- if (argc != 2)
+ if (argc != 3)
{
ft_printf("Wrong invocation, it should be done as follows:\n"
- "\t%s source_jpeg\n",
- argv[0]);
+ "\t%s source_jpeg target_jpeg\n",
+ argv[0]);
return (1);
}
display(argv);