26#define WIN32_NO_STATUS
55 __wine_dbg_output(
"\n" );
62 __wine_dbg_output(
"\n" );
107 ERR(
"unknown whence value %i\n", whence);
190 uint16_t extra_sample_count, extra_sample, *extra_samples;
192 UINT resolution_unit;
193 float xres=0.0, yres=0.0;
201 decode_info->
tiled = 0;
207 WARN(
"missing PhotometricInterpretation tag\n");
213 decode_info->
bps = bps;
224 if (!
ret) planar = 1;
227 FIXME(
"unhandled planar configuration %u\n", planar);
231 decode_info->
planar = planar;
233 TRACE(
"planar %u, photometric %u, samples %u, bps %u\n", planar, photometric,
samples, bps);
246 extra_sample_count = 1;
248 extra_samples = &extra_sample;
253 FIXME(
"unhandled %dbpp sample count %u\n", bps,
samples);
267 decode_info->
frame.pixel_format = GUID_WICPixelFormatBlackWhite;
272 FIXME(
"unhandled 4bpp grayscale sample count %u\n",
samples);
275 decode_info->
frame.pixel_format = GUID_WICPixelFormat4bppGray;
279 decode_info->
frame.pixel_format = GUID_WICPixelFormat8bppGray;
282 decode_info->
frame.bpp = 32;
284 switch(extra_samples[0])
287 decode_info->
frame.pixel_format = GUID_WICPixelFormat32bppPBGRA;
291 decode_info->
frame.pixel_format = GUID_WICPixelFormat32bppBGRA;
294 FIXME(
"unhandled extra sample type %u\n", extra_samples[0]);
302 FIXME(
"unhandled 16bpp grayscale sample count %u\n",
samples);
305 decode_info->
frame.pixel_format = GUID_WICPixelFormat16bppGray;
310 FIXME(
"unhandled 32bpp grayscale sample count %u\n",
samples);
313 decode_info->
frame.pixel_format = GUID_WICPixelFormat32bppGrayFloat;
316 WARN(
"unhandled greyscale bit count %u\n", bps);
326 extra_sample_count = 1;
328 extra_samples = &extra_sample;
346 decode_info->
frame.pixel_format = GUID_WICPixelFormat24bppBGR;
348 switch(extra_samples[0])
351 decode_info->
frame.pixel_format = GUID_WICPixelFormat32bppPBGRA;
355 decode_info->
frame.pixel_format = GUID_WICPixelFormat32bppBGRA;
358 FIXME(
"unhandled extra sample type %i\n", extra_samples[0]);
364 decode_info->
frame.pixel_format = GUID_WICPixelFormat48bppRGB;
366 switch(extra_samples[0])
369 decode_info->
frame.pixel_format = GUID_WICPixelFormat64bppPRGBA;
373 decode_info->
frame.pixel_format = GUID_WICPixelFormat64bppRGBA;
376 FIXME(
"unhandled extra sample type %i\n", extra_samples[0]);
382 decode_info->
frame.pixel_format = GUID_WICPixelFormat96bppRGBFloat;
384 switch(extra_samples[0])
387 decode_info->
frame.pixel_format = GUID_WICPixelFormat128bppPRGBAFloat;
391 decode_info->
frame.pixel_format = GUID_WICPixelFormat128bppRGBAFloat;
394 FIXME(
"unhandled extra sample type %i\n", extra_samples[0]);
399 WARN(
"unhandled RGB bit count %u\n", bps);
411 decode_info->
frame.bpp = bps;
415 decode_info->
frame.pixel_format = GUID_WICPixelFormat1bppIndexed;
418 decode_info->
frame.pixel_format = GUID_WICPixelFormat2bppIndexed;
421 decode_info->
frame.pixel_format = GUID_WICPixelFormat4bppIndexed;
424 decode_info->
frame.pixel_format = GUID_WICPixelFormat8bppIndexed;
427 FIXME(
"unhandled indexed bit count %u\n", bps);
435 FIXME(
"unhandled Separated sample count %u\n",
samples);
443 decode_info->
frame.pixel_format = GUID_WICPixelFormat32bppCMYK;
446 decode_info->
frame.pixel_format = GUID_WICPixelFormat64bppCMYK;
450 WARN(
"unhandled Separated bit count %u\n", bps);
459 FIXME(
"unhandled PhotometricInterpretation %u\n", photometric);
466 WARN(
"missing image width\n");
473 WARN(
"missing image length\n");
479 decode_info->
tiled = 1;
484 WARN(
"missing tile height\n");
515 WARN(
"missing X resolution\n");
527 WARN(
"missing Y resolution\n");
534 if (xres == 0.0 || yres == 0.0)
536 decode_info->
frame.dpix = decode_info->
frame.dpiy = 96.0;
540 switch (resolution_unit)
543 FIXME(
"unknown resolution unit %i\n", resolution_unit);
548 decode_info->
frame.dpix = xres;
549 decode_info->
frame.dpiy = yres;
552 decode_info->
frame.dpix = xres * 2.54;
553 decode_info->
frame.dpiy = yres * 2.54;
561 decode_info->
frame.num_colors = 1 << decode_info->
bps;
562 for (
i=0;
i<decode_info->
frame.num_colors;
i++)
564 decode_info->
frame.palette[
i] = 0xff000000 |
565 ((
red[
i]<<8) & 0xff0000) |
567 ((
blue[
i]>>8) & 0xff);
572 decode_info->
frame.num_colors = 0;
576 decode_info->
frame.num_color_contexts = 1;
578 decode_info->
frame.num_color_contexts = 0;
593 This->cached_frame = 0;
616 if (frame >=
This->frame_count)
619 if (
This->cached_frame == frame)
622 prev_tile_size =
This->cached_tile ?
This->cached_decode_info.tile_size : 0;
630 This->cached_tile_x = -1;
634 This->cached_frame = frame;
635 if (
This->cached_decode_info.tile_size > prev_tile_size)
644 This->cached_frame =
This->frame_count;
660 *
info =
This->cached_decode_info.frame;
683 if (
info->source_bpp == 3 &&
info->samples == 3 &&
info->frame.bpp == 24)
694 for (
y = 0;
y <
info->tile_height;
y++)
699 for (
x = 0;
x <
info->tile_width;
x += 8)
701 dst[2] = (
src[0] & 0x80) ? 0xff : 0;
702 dst[1] = (
src[0] & 0x40) ? 0xff : 0;
703 dst[0] = (
src[0] & 0x20) ? 0xff : 0;
704 if (
x + 1 <
info->tile_width)
706 dst[5] = (
src[0] & 0x10) ? 0xff : 0;
707 dst[4] = (
src[0] & 0x08) ? 0xff : 0;
708 dst[3] = (
src[0] & 0x04) ? 0xff : 0;
710 if (
x + 2 <
info->tile_width)
712 dst[8] = (
src[0] & 0x02) ? 0xff : 0;
713 dst[7] = (
src[0] & 0x01) ? 0xff : 0;
714 dst[6] = (
src[1] & 0x80) ? 0xff : 0;
716 if (
x + 3 <
info->tile_width)
718 dst[11] = (
src[1] & 0x40) ? 0xff : 0;
719 dst[10] = (
src[1] & 0x20) ? 0xff : 0;
720 dst[9] = (
src[1] & 0x10) ? 0xff : 0;
722 if (
x + 4 <
info->tile_width)
724 dst[14] = (
src[1] & 0x08) ? 0xff : 0;
725 dst[13] = (
src[1] & 0x04) ? 0xff : 0;
726 dst[12] = (
src[1] & 0x02) ? 0xff : 0;
728 if (
x + 5 <
info->tile_width)
730 dst[17] = (
src[1] & 0x01) ? 0xff : 0;
731 dst[16] = (
src[2] & 0x80) ? 0xff : 0;
732 dst[15] = (
src[2] & 0x40) ? 0xff : 0;
734 if (
x + 6 <
info->tile_width)
736 dst[20] = (
src[2] & 0x20) ? 0xff : 0;
737 dst[19] = (
src[2] & 0x10) ? 0xff : 0;
738 dst[18] = (
src[2] & 0x08) ? 0xff : 0;
740 if (
x + 7 <
info->tile_width)
742 dst[23] = (
src[2] & 0x04) ? 0xff : 0;
743 dst[22] = (
src[2] & 0x02) ? 0xff : 0;
744 dst[21] = (
src[2] & 0x01) ? 0xff : 0;
754 else if (
info->source_bpp == 12 &&
info->samples == 3 &&
info->frame.bpp == 24)
765 for (
y = 0;
y <
info->tile_height;
y++)
770 for (
x = 0;
x <
info->tile_width;
x += 2)
772 dst[0] = ((
src[1] & 0xf0) >> 4) * 17;
773 dst[1] = (
src[0] & 0x0f) * 17;
774 dst[2] = ((
src[0] & 0xf0) >> 4) * 17;
775 if (
x + 1 <
info->tile_width)
777 dst[5] = (
src[1] & 0x0f) * 17;
778 dst[4] = ((
src[2] & 0xf0) >> 4) * 17;
779 dst[3] = (
src[2] & 0x0f) * 17;
789 else if (
info->source_bpp == 4 &&
info->samples == 4 &&
info->frame.bpp == 32)
800 for (
y = 0;
y <
info->tile_height;
y++)
807 for (
x = 0;
x <
info->tile_width;
x += 2)
809 dst[0] = (
src[0] & 0x20) ? 0xff : 0;
810 dst[1] = (
src[0] & 0x40) ? 0xff : 0;
811 dst[2] = (
src[0] & 0x80) ? 0xff : 0;
812 dst[3] = (
src[0] & 0x10) ? 0xff : 0;
813 if (
x + 1 <
info->tile_width)
815 dst[4] = (
src[0] & 0x02) ? 0xff : 0;
816 dst[5] = (
src[0] & 0x04) ? 0xff : 0;
817 dst[6] = (
src[0] & 0x08) ? 0xff : 0;
818 dst[7] = (
src[0] & 0x01) ? 0xff : 0;
828 else if (
info->source_bpp == 16 &&
info->samples == 4 &&
info->frame.bpp == 32)
839 for (
y = 0;
y <
info->tile_height;
y++)
844 for (
x = 0;
x <
info->tile_width;
x++)
846 dst[0] = ((
src[1] & 0xf0) >> 4) * 17;
847 dst[1] = (
src[0] & 0x0f) * 17;
848 dst[2] = ((
src[0] & 0xf0) >> 4) * 17;
849 dst[3] = (
src[1] & 0x0f) * 17;
858 else if (
info->source_bpp == 16 &&
info->samples == 2 &&
info->frame.bpp == 32)
863 src =
This->cached_tile +
info->tile_width *
info->tile_height * 2 - 2;
873 if (
info->reverse_bgr)
880 info->tile_height,
info->tile_width * sample_count);
889 samples_per_row =
info->tile_width *
info->samples;
896 sample =
This->cached_tile +
row *
info->tile_stride;
897 for (
i=0;
i<samples_per_row;
i++)
900 sample[1] = sample[0];
907 ERR(
"unhandled bps for byte swap %u\n",
info->bps);
912 if (
info->invert_grayscale)
916 if (
info->samples != 1)
918 ERR(
"cannot invert grayscale image with %u samples\n",
info->samples);
924 for (
byte =
This->cached_tile;
byte !=
end;
byte++)
928 This->cached_tile_x = tile_x;
929 This->cached_tile_y = tile_y;
939 UINT min_tile_x, max_tile_x, min_tile_y, max_tile_y;
949 if (!
This->cached_tile)
952 if (!
This->cached_tile)
956 min_tile_x =
prc->X /
info->tile_width;
957 min_tile_y =
prc->Y /
info->tile_height;
958 max_tile_x = (
prc->X+
prc->Width-1) /
info->tile_width;
959 max_tile_y = (
prc->Y+
prc->Height-1) /
info->tile_height;
961 for (tile_x=min_tile_x; tile_x <= max_tile_x; tile_x++)
963 for (tile_y=min_tile_y; tile_y <= max_tile_y; tile_y++)
965 if (tile_x !=
This->cached_tile_x || tile_y !=
This->cached_tile_y)
972 if (
prc->X < tile_x *
info->tile_width)
975 rc.
X =
prc->X - tile_x *
info->tile_width;
977 if (
prc->Y < tile_y *
info->tile_height)
980 rc.
Y =
prc->Y - tile_y *
info->tile_height;
982 if (
prc->X+
prc->Width > (tile_x+1) *
info->tile_width)
984 else if (
prc->X < tile_x *
info->tile_width)
989 if (
prc->Y+
prc->Height > (tile_y+1) *
info->tile_height)
991 else if (
prc->Y < tile_y *
info->tile_height)
997 ((
info->frame.bpp * ((rc.
X + tile_x *
info->tile_width) -
prc->X) + 7) / 8);
1000 info->tile_width,
info->tile_height,
info->tile_stride,
1001 &rc,
stride, buffersize, dst_tilepos);
1060#ifdef WORDS_BIGENDIAN
1066 result.reader_clsid = CLSID_WICIfdMetadataReader;
1101 This->cached_tile_x = -1;
1104 info->container_format = GUID_ContainerFormatTiff;
1105 info->block_format = GUID_ContainerFormatTiff;
1106 info->clsid = CLSID_WICTiffDecoder;
1126 {&GUID_WICPixelFormat24bppBGR, 2, 8, 3, 24, 0, 0, 1},
1127 {&GUID_WICPixelFormat24bppRGB, 2, 8, 3, 24, 0, 0, 0},
1128 {&GUID_WICPixelFormatBlackWhite, 1, 1, 1, 1, 0, 0, 0},
1129 {&GUID_WICPixelFormat4bppGray, 1, 4, 1, 4, 0, 0, 0},
1130 {&GUID_WICPixelFormat8bppGray, 1, 8, 1, 8, 0, 0, 0},
1131 {&GUID_WICPixelFormat32bppBGRA, 2, 8, 4, 32, 1, 2, 1},
1132 {&GUID_WICPixelFormat32bppPBGRA, 2, 8, 4, 32, 1, 1, 1},
1133 {&GUID_WICPixelFormat48bppRGB, 2, 16, 3, 48, 0, 0, 0},
1134 {&GUID_WICPixelFormat64bppRGBA, 2, 16, 4, 64, 1, 2, 0},
1135 {&GUID_WICPixelFormat64bppPRGBA, 2, 16, 4, 64, 1, 1, 0},
1136 {&GUID_WICPixelFormat1bppIndexed, 3, 1, 1, 1, 0, 0, 0, 1},
1137 {&GUID_WICPixelFormat4bppIndexed, 3, 4, 1, 4, 0, 0, 0, 1},
1138 {&GUID_WICPixelFormat8bppIndexed, 3, 8, 1, 8, 0, 0, 0, 1},
1199 if (
This->num_frames != 0)
1203 This->lines_written = 0;
1204 This->encoder_frame = *frame;
1219 if (
This->format->extra_sample)
1222 extra_samples =
This->format->extra_sample_type;
1230 if (frame->
dpix != 0.0 && frame->
dpiy != 0.0)
1259 BYTE *row_data, *swapped_data =
NULL;
1262 line_size = ((
This->encoder_frame.width *
This->format->bpp)+7)/8;
1264 if (
This->format->reverse_bgr)
1266 swapped_data =
malloc(line_size);
1271 for (
i=0;
i<line_count;
i++)
1275 if (
This->format->reverse_bgr &&
This->format->bps == 8)
1277 memcpy(swapped_data, row_data, line_size);
1278 for (
j=0;
j<line_size;
j +=
This->format->samples)
1281 temp = swapped_data[
j];
1282 swapped_data[
j] = swapped_data[
j+2];
1283 swapped_data[
j+2] =
temp;
1285 row_data = swapped_data;
1291 This->lines_written += line_count;
1338 This->num_frames = 0;
1341 info->container_format = GUID_ContainerFormatTiff;
1342 info->clsid = CLSID_WICTiffEncoder;
unsigned short int uint16_t
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void copy_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch, BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *size, const struct pixel_format_desc *format) DECLSPEC_HIDDEN
#define WINE_DECLARE_DEBUG_CHANNEL(x)
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
int(* __wine_dbg_vlog)(unsigned int cls, const char *channel, const char *function, const char *format, va_list args)
HRESULT CDECL tiff_decoder_create(struct decoder_info *info, struct decoder **result)
static HRESULT CDECL tiff_encoder_commit_frame(struct encoder *iface)
static struct tiff_decoder * impl_from_decoder(struct decoder *iface)
static HRESULT tiff_decoder_read_tile(struct tiff_decoder *This, UINT tile_x, UINT tile_y)
static TIFF * tiff_open_stream(IStream *stream, const char *mode)
static void CDECL tiff_encoder_destroy(struct encoder *iface)
static void CDECL tiff_decoder_destroy(struct decoder *iface)
static HRESULT CDECL tiff_encoder_write_lines(struct encoder *iface, BYTE *data, DWORD line_count, DWORD stride)
static void tiff_warning_handler(const char *module, const char *format, va_list args)
static HRESULT tiff_get_decode_info(TIFF *tiff, tiff_decode_info *decode_info)
static toff_t tiff_stream_size(thandle_t client_data)
static HRESULT CDECL tiff_encoder_initialize(struct encoder *iface, IStream *stream)
static HRESULT tiff_decoder_select_frame(struct tiff_decoder *This, DWORD frame)
static toff_t tiff_stream_seek(thandle_t client_data, toff_t offset, int whence)
static void tiff_error_handler(const char *module, const char *format, va_list args)
static HRESULT CDECL tiff_encoder_create_frame(struct encoder *iface, const struct encoder_frame *frame)
static tsize_t tiff_stream_read(thandle_t client_data, tdata_t data, tsize_t size)
static tsize_t tiff_stream_write(thandle_t client_data, tdata_t data, tsize_t size)
static HRESULT CDECL tiff_decoder_get_color_context(struct decoder *iface, UINT frame, UINT num, BYTE **data, DWORD *datasize)
static const struct encoder_funcs tiff_encoder_vtable
static int tiff_stream_map(thandle_t client_data, tdata_t *addr, toff_t *size)
static HRESULT CDECL tiff_decoder_get_metadata_blocks(struct decoder *iface, UINT frame, UINT *count, struct decoder_block **blocks)
static void tiff_stream_unmap(thandle_t client_data, tdata_t addr, toff_t size)
static HRESULT CDECL tiff_decoder_initialize(struct decoder *iface, IStream *stream, struct decoder_stat *st)
static HRESULT CDECL tiff_encoder_commit_file(struct encoder *iface)
HRESULT CDECL tiff_encoder_create(struct encoder_info *info, struct encoder **result)
static const struct tiff_encode_format formats[]
static HRESULT CDECL tiff_decoder_copy_pixels(struct decoder *iface, UINT frame, const WICRect *prc, UINT stride, UINT buffersize, BYTE *buffer)
static int tiff_stream_close(thandle_t client_data)
static HRESULT CDECL tiff_decoder_get_frame_info(struct decoder *iface, UINT frame, struct decoder_frame *info)
static const struct decoder_funcs tiff_decoder_vtable
static HRESULT CDECL tiff_encoder_get_supported_format(struct encoder *iface, GUID *pixel_format, DWORD *bpp, BOOL *indexed)
static struct tiff_encoder * impl_from_encoder(struct encoder *iface)
#define memcpy(s1, s2, n)
#define IsEqualGUID(rguid1, rguid2)
struct decoder_frame frame
tiff_decode_info cached_decode_info
const struct tiff_encode_format * format
static void swap_bytes(void *buf, size_t samplesize, size_t samplecount)
void TIFFClose(TIFF *tif)
uint64 TIFFCurrentDirOffset(TIFF *tif)
int TIFFSetField(TIFF *tif, uint32 tag,...)
int TIFFGetField(TIFF *tif, uint32 tag,...)
int TIFFSetDirectory(TIFF *tif, uint16 dirn)
uint16 TIFFNumberOfDirectories(TIFF *tif)
int TIFFWriteDirectory(TIFF *tif)
TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler handler)
TIFF * TIFFClientOpen(const char *name, const char *mode, thandle_t clientdata, TIFFReadWriteProc readproc, TIFFReadWriteProc writeproc, TIFFSeekProc seekproc, TIFFCloseProc closeproc, TIFFSizeProc sizeproc, TIFFMapFileProc mapproc, TIFFUnmapFileProc unmapproc)
int TIFFIsByteSwapped(TIFF *tif)
tmsize_t TIFFReadEncodedStrip(TIFF *tif, uint32 strip, void *buf, tmsize_t size)
tmsize_t TIFFReadEncodedTile(TIFF *tif, uint32 tile, void *buf, tmsize_t size)
TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler handler)
int TIFFWriteScanline(TIFF *tif, void *buf, uint32 row, uint16 sample)
#define TIFFTAG_BITSPERSAMPLE
#define TIFFTAG_RESOLUTIONUNIT
#define TIFFTAG_SAMPLESPERPIXEL
#define TIFFTAG_PHOTOMETRIC
#define TIFFTAG_TILELENGTH
#define TIFFTAG_EXTRASAMPLES
#define TIFFTAG_IMAGEWIDTH
#define TIFFTAG_XRESOLUTION
#define TIFFTAG_ICCPROFILE
#define TIFFTAG_YRESOLUTION
#define TIFFTAG_ROWSPERSTRIP
#define TIFFTAG_TILEWIDTH
#define TIFFTAG_IMAGELENGTH
#define TIFFTAG_PLANARCONFIG
#define CONTAINING_RECORD(address, type, field)
@ WICBitmapDecoderCapabilityCanDecodeSomeImages
@ WICBitmapDecoderCapabilityCanEnumerateMetadata
@ WICBitmapDecoderCapabilityCanDecodeAllImages
HRESULT CDECL stream_write(IStream *stream, const void *buffer, ULONG write, ULONG *bytes_written)
HRESULT CDECL stream_getsize(IStream *stream, ULONGLONG *size)
HRESULT CDECL stream_seek(IStream *stream, LONGLONG ofs, DWORD origin, ULONGLONG *new_position)
void reverse_bgr8(UINT bytesperpixel, LPBYTE bits, UINT width, UINT height, INT stride)
#define DECODER_BLOCK_READER_CLSID
#define DECODER_BLOCK_FULL_STREAM
#define ENCODER_FLAGS_MULTI_FRAME
#define ENCODER_FLAGS_SUPPORTS_METADATA
@ ENCODER_OPTION_COMPRESSION_METHOD
@ ENCODER_OPTION_COMPRESSION_QUALITY
@ WICPersistOptionBigEndian
@ WICPersistOptionLittleEndian
@ WICPersistOptionNoCacheStream
#define WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT