补充:c++ builder 与 windows  API经典范例

#include <vcl.h>
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
//用Bitmap简化Image1图文件叙述
Graphics::TBitmap *Bitmap = Image1->Picture->Bitmap; //建立一新暂时设定,以利图文件16位转成8位时的最适化
BITMAPINFO bmi;
//将bmi结构所在内存初始化
memset(&bmi, , sizeof(BITMAPINFO));
//BITMAPINFO结构包含BITMAPINFOHEADER结构+RGBQUAD结构
//设置BITMAPINFOHEADER结构成员
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);//结构大小
bmi.bmiHeader.biWidth = Bitmap->Width;//位图宽度
bmi.bmiHeader.biHeight = Bitmap->Height; //位图高度
bmi.bmiHeader.biPlanes = ;//目的装置平面数,必为1
//转换成 8 位像素
bmi.bmiHeader.biBitCount = ; // 8位像素
//设置RGBQUAD结构成员
DWORD BitMasks[];
BitMasks[] = 0xFFFF;//Blue明亮度
BitMasks[] = 0xFFFF;//Green明亮度
BitMasks[] = 0xFFFF;//Red明亮度
//将设好的RGB结构填入到RGBQUAD结构中
memcpy(bmi.bmiColors, BitMasks, sizeof(BitMasks)); unsigned char *bits;
//将BITMAPINFO结构创造一个新DIB图文件,并返回handle
HBITMAP HBmp = ::CreateDIBSection(, &bmi, DIB_RGB_COLORS,
reinterpret_cast<void **>(&bits),
NULL, NULL); if (HBmp)
{
//建立与指定DC兼容的DC
HDC Hdc = ::CreateCompatibleDC();
//选定新对象,并返回原有对象设置
HBITMAP HOldBmp = ::SelectObject(Hdc, HBmp);
try
{
//先由Image复制图像至暂时设备
::BitBlt(Hdc, , ,
Bitmap->Width, Bitmap->Height,
Bitmap->Canvas->Handle, , ,
SRCCOPY);
//再由暂时设备复制图像至Form1上
::BitBlt(Canvas->Handle, , ,
Bitmap->Width, Bitmap->Height,
Hdc, , ,
SRCCOPY);
} catch (...)
{
//先恢复原设置,再释放对象
::DeleteObject(::SelectObject(Hdc, HOldBmp));
//释放DC
::DeleteDC(Hdc);
}
//先恢复原设置,再释放对象
::DeleteObject(::SelectObject(Hdc, HOldBmp));
//释放DC
::DeleteDC(Hdc);
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender)
{
//在内存中配置一个新图文件
//在Unit1.h中加入 #include <memory>
std::auto_ptr<Graphics::TBitmap> Bitmap(new Graphics::TBitmap());
//设置长宽
Bitmap->Width = Image1->Picture->Bitmap->Width;
Bitmap->Height = Image1->Picture->Bitmap->Height;
//设置为8位图文件
Bitmap->PixelFormat = pf8bit;
//将Image1复制至此新图文件,并最适化
::BitBlt(Bitmap->Canvas->Handle, , ,
Bitmap->Width, Bitmap->Height,
Image1->Canvas->Handle, , ,
SRCCOPY);
//再将此图文件指派回Image1
Image1->Picture->Bitmap->Assign(Bitmap.get());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
//释放所有图文件
for(int i=;i<ComponentCount;i++)
if (Components[i]->ClassNameIs("TBitmap"))
delete Components[i]; }
//---------------------------------------------------------------------------

这种代码完全看不懂,先把过程照着wp写下来,之后慢慢 分析吧,首先字符 wrong定位到算法函数:

如图为主函数:

用exescope导出dump如图

于是写出脚本,拷贝别人的:

from PIL import Image
width = 200
height = 150
image_file = open('Data_1.bin', 'rb')
data = image_file.read()
image = Image.frombuffer('RGB', (width, height), data, 'raw', 'RGB')
image = image.transpose(Image.FLIP_TOP_BOTTOM)
image.show()
image_file.close()

于是得到了这张图片

【练习】reserving.kr 之imageprc write up的更多相关文章

  1. 【练习】reserving.kr之easy ELF

    打开主函数: int __cdecl main() { int result; // eax@2 write(, "Reversing.Kr Easy ELF\n\n", 0x17 ...

  2. 【练习】reserving.kr 之Direct3D FPS

    算法函数如图,关键点在标志处,加密字符串如下图 于是写如下脚本: flag_c='436B666B62756C694C455C455F5A461C07252529701734390116494C201 ...

  3. pwnable.kr的passcode

    前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...

  4. [转] 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽

    字符串模式匹配算法——BM.Horspool.Sunday.KMP.KR.AC算法一网打尽 转载自:http://dsqiu.iteye.com/blog/1700312 本文内容框架: §1 Boy ...

  5. 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽

    字符串模式匹配算法——BM.Horspool.Sunday.KMP.KR.AC算法一网打尽 本文内容框架: §1 Boyer-Moore算法 §2 Horspool算法 §3 Sunday算法 §4 ...

  6. pwnable.kr bof之write up

    这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...

  7. pwnable.kr col之write up

    Daddy told me about cool MD5 hash collision today. I wanna do something like that too! ssh col@pwnab ...

  8. pwnable.kr brainfuck之write up

    I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...

  9. pwnable.kr login之write up

    main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...

随机推荐

  1. iOS UITextView 设置圆角边框线

    textView.layer.borderColor = UIColor.lightGray.cgColor textView.layer.cornerRadius = 4 textView.laye ...

  2. C++类 单冒号

    1.继承 class Base { }; class Derived : public Base { }; 示列: class Base   { public: int a=10;  }; class ...

  3. Fzu Problem 1901 Period II (kmp)

    题目链接: Problem 1901 Period II 题目描述: 给出一个串,满足长度为p的前缀和长度为p的后缀相等的p的个数,输出p的个数,和p分别是多少? 解题思路: 对kmp的next数组的 ...

  4. 题解报告:poj 2631 Roads in the North(最长链)

    Description Building and maintaining roads among communities in the far North is an expensive busine ...

  5. 关于bootstrap table的server分页

    首先是bootstrap初始化的表格参数: // 初始化Table oTableInit.Init = function() { $('#booksTable').bootstrapTable({ u ...

  6. Vijos p1518河流 树形DP

    https://vijos.org/p/1518 这题代码我基本是抄的,实在太难想了.但是也学到了一些东西. 比如:多叉树转二叉树存,这个细细一想,确实使得在dfs的时候,实现起来方便很多. 说一说具 ...

  7. RHEL 6.5----heartbeat

    主机名 IP  所需软件  master 192.168.30.130  heartbeat.httpd node-1 192.168.30.131  nfs  node-2 192.168.30.1 ...

  8. RHEL 6.5-----MFS

    主机名 IP  安装服务 master  192.168.30.130   mfsmaster.mfsmetalogger node-1  192.168.30.131  chunkserver  n ...

  9. rhel6.5--http练习

    包名 简介 httpd-2.2.15-29.el6_4.x86_64.rpm         http服务的主程序包 httpd-devel-2.2.15-29.el6_4.x86_64.rpm ap ...

  10. Ionic之增加样式会自动换行解决方案

    设置样式的时候,引用自身的样式,能正常显示,但是引用自定义样式显示的时候,竟然或自动换行,好尴尬. 原本代码: $('.codeSuccess').css({'display':'block'}); ...