如何把一张大分辨率的JPEG图存为小分辨率的JPEG图

zkhraul 2010-12-28 10:22:58
如何把一张大分辨率的JPEG图存为小分辨率的JPEG图,IIMAGE怎么使用?有例子参考下吗,急,谢谢
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkhraul 2010-12-29
  • 打赏
  • 举报
回复
我找了个资料,刚好和我人需求一样,不知道WINDOWS MOBILE下支持下面所说的GDI+吗

我用GDI+缩小一个JPG图片,从网上down下来的这个图片原本是208×275,大小为10K,我使用GDI+将尺寸缩小至151×200后,图片的大小反而变成了22K,我的代码如下:
C/C++ code
void compressImpl(const std::string& path, int size, UInt8 quality)
{
HBITMAP hbmReturn = NULL;
Bitmap* bmPhoto = NULL;

std::wstring upath;
UnicodeConverter::toUTF16(path, upath);

{
Bitmap image(upath.c_str());

int srcWidth = image.GetWidth();
int srcHeight = image.GetHeight();

float percent = 0;
int destX = 0, destY = 0;
if (srcWidth > srcHeight)
{
percent = ((float)size/(float)srcWidth);
destX = (int)((size - (srcWidth * percent))/2);
}
else
{
percent = ((float)size/(float)srcHeight);
destY = (int)((size - (srcHeight * percent))/2);
}

if (percent >= 1.0f)
return; // skip compress

int destWidth = (int)(srcWidth * percent);
int destHeight = (int)(srcHeight * percent);

bmPhoto = new Bitmap(destWidth, destHeight, PixelFormat24bppRGB);
bmPhoto->SetResolution(image.GetHorizontalResolution(), image.GetVerticalResolution());

Graphics *grPhoto = Graphics::FromImage(bmPhoto);
Color colorW(255, 255, 255, 255);
grPhoto->Clear(colorW);
grPhoto->SetInterpolationMode(InterpolationModeHighQualityBicubic);
grPhoto->DrawImage(&image, Rect(destX, destY, destWidth, destHeight));

bmPhoto->GetHBITMAP(colorW, &hbmReturn);
delete grPhoto;
}

// find appropriate encoder, jpeg
CLSID encoderClsid;
getEncoderClsid(L"image/jpeg", &encoderClsid);

// set output quality for jpeg alone
EncoderParameters encoderParameters;
setEncoderQuality(&encoderParameters, quality);

// output to image file with desired quality
bmPhoto->Save(upath.c_str(), &encoderClsid, &encoderParameters);

// release resources
delete bmPhoto;
DeleteObject(hbmReturn);
}

int getEncoderClsid(const WCHAR* format, void* clsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes

ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure

pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure

GetImageEncoders(num, size, pImageCodecInfo);
for (UINT j = 0; j < num; ++j)
{
if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0)
{
*(CLSID*)clsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; //Success
}
}

free(pImageCodecInfo);
return -1; // Failure
}

void setEncoderQuality(void* params, UInt8 quality)
{
EncoderParameters* encoderParams = (EncoderParameters*)params;
encoderParams->Count = 1;
encoderParams->Parameter[0].Guid = EncoderQuality;
encoderParams->Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParams->Parameter[0].NumberOfValues = 1;

encoderParams->Parameter[0].Value = &quality;
}

zkhraul 2010-12-29
  • 打赏
  • 举报
回复
我用的是WIN32,GetThumbnail好像不支持吧
biosli 2010-12-29
  • 打赏
  • 举报
回复
CxImage开源工程,参考一下~~
IImage似乎不能编码,只能解码。就是说你能把图片解成Bitmap,改变大小,但是不能再打回JPEG
YourKing 2010-12-29
  • 打赏
  • 举报
回复
调用IImage的GetThumbnail
内容概要:本文围绕“考虑电能交互的冷热电区域多微网系统双层多场景协同优化配置”的Matlab代码实现展开,提出一种结合电能交互机制的双层优化模型,用于解决冷、热、电多能耦合背景下多微网系统的协同规划与运行问题。研究采用多场景分析方法应对可再生能源出力与负荷需求的不确定性,通过上层规划设备容量配置与下层优化多时段运行策略的联动,提升系统在复杂环境下的经济性、鲁棒性与能源利用效率。所提供的Matlab代码集成了建模、求解(如YALMIP+CPLEX)与结果可视化全流程,涵盖场景生成与削减、双层优化结构设计及多能流协同调度等关键技术环节,为综合能源系统优化提供了完整的算法实现与技术参考。; 适合人群:具备电力系统、综合能源系统或优化建模背景,熟悉Matlab编程与数学规划方法,正在从事相关领域科研或工程设计工作的研究生、高校研究人员及能源行业技术人员。; 使用场景及目标:①开展冷热电联供(CCHP)多微网系统的容量规划与运行优化研究;②支撑含分布式能源、储能及多能转换设备的综合能源系统多目标、多场景优化建模;③学习与复现双层优化、分布鲁棒优化及场景分析等先进优化方法在能源系统中的实际应用。; 阅读建议:建议结合配套文献与代码同步研读,重点理解双层模型的构建逻辑、变量耦合关系与求解技巧,关注场景生成方法与YALMIP调用细节,通过调整参数、修改目标函数等方式进行仿真实验,以深化对系统优化机理的掌握。
内容概要:本文系统研究了单相逆变器闭环控制下的PWM调制模型,基于Simulink平台构建完整的逆变电路仿真系统,涵盖主电路拓扑、闭环控制器设计、脉宽调制信号生成及输出滤波等关键环节。通过引入比例积分(PI)反馈控制策略,实现对输出电压幅值与波形的精确调节,有效抑制负载扰动带来的影响,提升系统的动态响应能力与稳态精度。仿真过程详细展示了系统建模、参数整定及性能验证的全流程,重点分析了闭环控制在改善输出正弦波质量、降低谐波畸变率方面的优势,为电力电子逆变装置的研发与优化提供了可靠的理论支撑与实践参考。; 适合人群:具备电力电子技术、自动控制原理基础知识及相关仿真经验的高校研究生、科研人员,以及从事新能源发电、不间断电源(UPS)、微电网、电动汽车等领域的工程技术人员。; 使用场景及目标:①掌握单相逆变器闭环控制系统的设计与建模方法;②深入理解PWM技术与反馈控制在逆变系统中的协同工作机制;③通过Simulink仿真平台完成系统搭建与参数调试,服务于课程设计、毕业课题、科研项目或工业产品开发中的逆变器控制算法验证。; 阅读建议:建议结合经典控制理论与电力电子变换技术同步学习,动手复现仿真模型并尝试调整PI控制器参数、载波频率等关键变量,观察其对系统稳定性与输出性能的影响,从而深化对控制机理的理解,并为进一步研究并网逆变、多电平逆变等复杂系统打下坚实基础。
代码转载自:https://pan.quark.cn/s/36f2a379e44e 所讨论的核心内容涉及运用Keras所训练的`.h5`模型对实例进行检测,此任务在深度学习领域内十分普遍。`.h5`作为Keras库保存模型构造与权重的文件类型,使得训练后的模型能够被储存,并在必要时被载入以执行预测操作。在开始前,务必确认已配置好Python 3.6的环境,并安装了opencv及Keras相关库。本案例中选用的数据集是MNIST,它是一个常用于手写数字识别的标准数据集。MNIST中的像均为28x28像素的灰度,因此在测试个人像时,也需将其调整为相同的像规格。若手写数字的背景并非黑色,比如呈现白底黑字的情况,可能会对模型的识别能力产生影响,因为模型在训练阶段所适应的是黑底白字的像。因此,在测试阶段,必须保证像被转换为黑底白字的格式。测试代码的主要步骤包括:首先,运用`load_model`函数载入`.h5`模型文件,例如使用`model = load_model(fm_cnn_BN.h5)`进行操作。其次,通过`cv2.imread`函数读取像,再借助`cv2.cvtColor`函数将像从RGB色彩空间转换为灰度色彩空间。同时,要确保像的尺寸与训练模型时的输入尺寸相匹配,一般设定为28x28像素。接着,利用`reshape`方法将像数据调整至模型所要求的维度。对于MNIST数据集而言,这通常意味着将像转化为一个一维数组,其形状为`(1, 1, 28, 28)`,其中1代表批次大小,其余部分则分别表示像的通道数、宽度和高度。然后,对数据进行标准化处理,将像素值缩放到0到1的范围内,这通常通过除以255来实现。最后,运用`predict_cl...

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧