我正在尝试使用以下代码将bmp图像转换为png图像:
#define WIN32_LEAN_AND_MEAN
#define _CRT_SECURE_NO_DEPRECATE
#include <png.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
void GetDesktopResolution(int& horizontal, int& vertical)
{
RECT desktop;
// Get a handle to the desktop window
const HWND hDesktop = GetDesktopWindow();
// Get the size of screen to the variable desktop
GetWindowRect(hDesktop, &desktop);
// The top left corner will have coordinates (0,0)
// and the bottom right corner will have coordinates
// (horizontal, vertical)
horizontal = desktop.right;
vertical = desktop.bottom;
}
typedef struct _RGBPixel {
uint8_t blue;
uint8_t green;
uint8_t red;
} RGBPixel;
/* Structure for containing decompressed bitmaps. */
typedef struct _RGBBitmap {
RGBPixel *pixels;
size_t width;
size_t height;
size_t bytewidth;
uint8_t bytes_per_pixel;
} RGBBitmap;
/* Returns pixel of bitmap at given point. */
#define RGBPixelAtPoint(image, x, y) \
*(((image)->pixels) + (((image)->bytewidth * (y)) \
+ ((x) * (image)->bytes_per_pixel)))
/* Attempts to save PNG to file; returns 0 on success, non-zero on error. */
int save_png_to_file(RGBBitmap *bitmap, const char *path)
{
FILE *fp = fopen(path, "wb");
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
size_t x, y;
png_uint_32 bytes_per_row;
png_byte **row_pointers = NULL;
if (fp == NULL) return -1;
/* Initialize the write struct. */
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr == NULL) {
fclose(fp);
return -1;
}
/* Initialize the info struct. */
info_ptr = png_create_info_struct(png_ptr);
if (info_ptr == NULL) {
png_destroy_write_struct(&png_ptr, NULL);
fclose(fp);
return -1;
}
/* Set up error handling. */
if (setjmp(png_jmpbuf(png_ptr))) {
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
return -1;
}
/* Set image attributes. */
png_set_IHDR(png_ptr,
info_ptr,
bitmap->width,
bitmap->height,
8,
PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,
PNG_FILTER_TYPE_DEFAULT);
/* Initialize rows of PNG. */
bytes_per_row = bitmap->width * bitmap->bytes_per_pixel;
png_malloc(png_ptr, bitmap->height * sizeof(png_byte *));
for (y = 0; y < bitmap->height; ++y) {
uint8_t *row = (uint8_t *)png_malloc(png_ptr, sizeof(uint8_t)* bitmap->bytes_per_pixel);
row_pointers[y] = (png_byte *)row;
for (x = 0; x < bitmap->width; ++x) {
RGBPixel color = RGBPixelAtPoint(bitmap, x, y);
*row++ = color.red;
*row++ = color.green;
*row++ = color.blue;
}
}
/* Actually write the image data. */
png_init_io(png_ptr, fp);
png_set_rows(png_ptr, info_ptr, row_pointers);
png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
/* Cleanup. */
for (y = 0; y < bitmap->height; y++) {
png_free(png_ptr, row_pointers[y]);
}
png_free(png_ptr, row_pointers);
/* Finish writing. */
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
return 0;
}
int main()
{
RGBBitmap rgbbitmap;
int w, h;
GetDesktopResolution(w, h);
rgbbitmap.height = h;
rgbbitmap.width = w;
rgbbitmap.bytes_per_pixel = 1;
rgbbitmap.bytewidth = w / 100;
RGBPixel rgbpixel;
rgbpixel.blue = 100;
rgbpixel.green = 100;
rgbpixel.red = 100;
rgbbitmap.pixels = &rgbpixel;
save_png_to_file(&rgbbitmap, "abc.bmp");
return 0;
}
执行此代码会触发以下错误:
LNK1120:9个未解析的外部
LNK2019:函数“int \uu cdecl save\u png\u to\u file(struct \u RGBBitmap*,char const*)”中引用的未解析外部符号\u png\u create\u info\u struct(?save\u png\u to\u file@@YAHPAU\u RGBBitmap@@PBD@Z)
LNK2019:函数“int \uu cdecl save\u png\u to\u file(struct \u RGBBitmap*,char const*)”中引用的未解析外部符号\u png\u create\u write\u struct(?save\u png\u to\u file@@YAHPAU\u RGBBitmap@@PBD@Z)
LNK2019:函数“int \uu cdecl save\u png\u to\u file(struct \u RGBBitmap*,char const*)”中引用的未解析外部符号\u png\u destroy\u write\u struct(?save\u png\u to\u file@@YAHPAU\u RGBBitmap@@PBD@Z)
LNK2019:未解析的外部符号_png_free引用在函数"int__cdeclsave_png_to_file(struct_RGBBitmap*,char const *)" (? save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z)
LNK2019:函数“int \uu cdecl save\u png\u to\u file(struct \u RGBBitmap*,char const*)”中引用了未解析的外部符号\u png\u init\u io(?save\u png\u to\u file@@YAHPAU\u RGBBitmap@@PBD@Z)
LNK2019:未解析的外部符号_png_malloc引用在函数"int__cdeclsave_png_to_file(struct_RGBBitmap*,char const *)" (? save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z)
LNK2019:函数“int \uu cdecl save\u png\u to\u file(struct \u RGBBitmap*,char const*)”中引用了未解析的外部符号\u png\u set\u IHDR(?save\u png\u to\u file@@YAHPAU\u RGBBitmap@@PBD@Z)
LNK2019:未解析的外部符号_png_set_rows引用在函数"int__cdeclsave_png_to_file(struct_RGBBitmap*,char const *)" (? save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z)
LNK2019:未解析的外部符号_png_write_png引用在函数"int__cdeclsave_png_to_file(struct_RGBBitmap*,char const *)" (? save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z)
我找不到如何修复这些错误。请问有什么好的建议吗?
我目前正在Windows 7 SP1平台上使用Visual Studio Ultimate 2013。
谢谢!
我想,你没有链接你的库,只是包含了标题。这个问题回答了你是如何做到的...
如果没有,那么会发生很多事情:
您可以尝试下载png库,创建VS2012项目并尝试编译它。这样做时,您在链接时应该绝对没有问题...
我试图在我的帖子中获取有关已安装应用程序的详细信息。而且,我收到了以下错误: 代码: 错误: LNK1120:5个未解析的外部 LNK2019:未解析的外部符号\u imp_RegCloseKey@4在函数“void \uu cdecl RegistryEnum(void)”中引用(?RegistryEnum@@YAXXZ) LNK2019:未解析的外部符号\u imp_RegEnumKeyExW
我得到了这个错误,但我不知道如何修复它。 我正在使用Visual Studio 2013。我将解决方案命名为MyProjectTest这是我的测试解决方案的结构: -功能。H -功能。cpp -main.cpp 我是初学者;这是一个简单的程序,运行时没有错误。我在互联网上阅读并对单元测试感兴趣,因此我创建了一个测试项目: 菜单文件→新建→项目...→已安装→模板→Visual C→测试→本地单元测
第22行是: 我不知道为什么我会得到这个,我已经检查了我的语法,所有似乎是正确的。它基本上不喜欢执行查询后的任何内容 编辑: 我明白这是容易SQL注入,但我这样做只是为了测试目的。
问题内容: 我有这个行代码 在我的本地(WAMP)php 5.4.3上运行良好,但是当我将其托管在服务器cpanel上时,它将给出此错误 我服务器上的php版本是5.2.17 我没有发现任何问题,请帮忙 问题答案: 您需要运行PHP 5.4+才能使用速记数组
问题内容: 调试代码时出现此错误: PHP解析错误:语法错误,第72行的order.php中出现意外的T_OBJECT_OPERATOR 这是代码段(从第72行开始): 问题答案: 不幸的是,不可能在刚用PHP 5.4之前创建的对象上调用方法。 在PHP 5.4和更高版本中,可以使用以下内容: 注意必填的括号对。 在以前的版本中,必须在变量上调用方法:
我发现php endif出现错误,找不到错误。这里我给出了我的代码。请帮我修一下