QT,JPEG解码源代码(已完成)
#ifndef JPEGDECODE_H
#define JPEGDECODE_H
#include "global.h"
#include "globalextern.h"
typedef unsigned char BYTE;
struct ImageComponentData
{
double value[3];
};
class MBitReader
{
public:
BYTE* Data;
int m_currentData;
int m_currentDataIndex;
int m_currentBitPosition;
MBitReader(BYTE* data,int currentDataIndex)
{
Data=data;
m_currentBitPosition=8;
m_currentDataIndex=currentDataIndex;
m_currentData=Data[m_currentDataIndex];
}
public:
int ReadNextBit()
{
if (m_currentBitPosition-1> m_currentBitPosition) & 0x01;
}
};
class MJpegDecode
{
public:
struct _JFIFAPPOInfo
{
BYTE APP0[2]; /* 02h Application Use Marker */
BYTE Length[2]; /* 04h Length of APP0 Field */
BYTE Identifier[5]; /* 06h "JFIF" (zero terminated) Id String */
BYTE Version[2]; /* 0Bh JFIF Format Revision */
BYTE Units; /* 0Dh Units used for Resolution */
BYTE Xdensity[2]; /* 0Eh Horizontal Resolution */
BYTE Ydensity[2]; /* 10h Vertical Resolution */
BYTE XThumbnail; /* 12h Thumbnail Horizontal Pixel Count */
BYTE YThumbnail; /* 13h Thumbnail Vertical Pixel Count */
} JFIFAPPOINFO;
struct _JFIFDQTInfo
{
BYTE DQT[2]; // 14h 量化表段标记
BYTE Length[2]; // 16h 量化表段长度
BYTE Identifier; // 18h 量化表ID
BYTE QTData[64]; // 19h 量化表数据
} JFIFDQTINFO[2];
struct _JFIFSOFOInfo
{
BYTE SOFO[2]; // 9Eh 帧开始段标记
BYTE Length[2]; // A0h 帧开始段长度
BYTE BitCount; // A2h 样本精度bit位数
BYTE Height[2]; // A5h 图像像素宽度
BYTE Width[2]; // A3h 图像像素高度
BYTE ComponentsCount; // A7h 图像组件计数
BYTE YIdentifier; // A8h 亮度Y的ID号
BYTE YHVSamplingCoefficient; // A9h 亮度Y垂直和水平采样系数
BYTE YUsedDQTIdentifier; // AAh 亮度Y使用的量化表ID号
BYTE CbIdentifier; // ABh 色度Cb的ID号
BYTE CbHVSamplingCoefficient; // ACh 色度Cb垂直和水平采样系数
BYTE CbUsedDQTIdentifier; // ADh 色度Cb使用的量化表ID号
BYTE CrIdentifier; // AEh 色度Cr的ID号
BYTE CrHVSamplingCoefficient; // AFh 色度Cr垂直和水平采样系数
BYTE CrUsedDQTIdentifier; // B0h 色度Cr使用的量化表ID号
} JFIFSOFOINFO;
struct _JFIFDRIInfo
{
BYTE DRI[2];
BYTE Length[2];
BYTE NMCUReset[2]; //每n个MCU块就有一个 RSTn 标记.
} JFIFDRIINFO;
struct _JFIFDHTInfo
{
BYTE DHT[2]; // B1h 哈夫曼表定义段标记
BYTE Length[2]; // B3h 哈夫曼表段长度
BYTE HTIdentifier; // B5h 哈夫曼表号
BYTE NBitsSymbolsCount[16]; // B6h (符号的二进制位长度为n)的符号个数
BYTE SymbolsTable[256]; // C6h 按递增次序代码长度排列的符号表
} JFIFDHTINFO[2][2];
struct _JFIFSOSInfo
{
BYTE SOS[2]; // 261h 扫描开始段标记
BYTE Length[2]; // 263h 扫描开始段长度
BYTE ComponentsCount; // 265h 扫描行内组件的数量
BYTE YIdentifier; // 266h 亮度Y的ID号
BYTE YHTTableID; // 267h 亮度Y使用的哈夫曼表ID号
BYTE CbIdentifier; // 268h 色度Cb的ID号
BYTE CbHTTableID; // 269h 色度Cb使用的哈夫曼表ID号
BYTE CrIdentifier; // 26Ah 色度Cr的ID号
BYTE CrHTTableID; // 26Bh 色度Cr使用的哈夫曼表ID号
BYTE Reserved[3]; // 26Ch 3个未知保留字节
} JFIFSOSINFO;
private:
struct HuffmanTable
{
int CodeOfFirstNLengthSymbol[17]; //长度为N的第一个码字的整数值
int NLengthToSymbolsTableIndex[16]; //查表得到第一个长度为N的符号位于符号表的索引
} HUFFMANTABLE[2][2];
public:
int ReadJFIFInfo(const BYTE* const jfifData,int jfifDataSize);
void DecodeData(int mcuStartIndex,BYTE* jfifData,int jfifDataSize,ImageComponentData*& targetBitmapData);
void SetHuffmanTable();
void DecodeOneDUDC(MBitReader* myBitReader,double* DU,double& lastDC,int index1,int index2);
void DecodeOneDUAC(MBitReader* myBitReader,double* DU,int index1,int index2);
void DecodeOneMCU(MBitReader* myBitReader,int mcuXn,int mcuYn,int mcuWidth,int mcuHeight,double *DU,ImageComponentData* targetImage);
void InverseQuantization(double* du,BYTE* quantizationTable);
void InverseZigzag(double* sourceDU,double* targetDU);
void IDCT(double* sourceDU,double* targetDU);
void YCbCrToRGB(ImageComponentData* sourceImage,ImageComponentData* targetImage);
public:
int imageHeight;
int imageWidth;
int alignedImageWidth;
int alignedImageHeight;
HuffmanTable* HT;
double DC[3];
int HSamplingCoefficient[3];
int VSamplingCoefficient[3];
int DQTID[3];
int nMCUReset;
};
#endif // JPEGDECODE_H
QT,jpeg解码project(未完成)
#ifndef JPEGDECODE_H
#define JPEGDECODE_H
#include "globalextern.h"
typedef unsigned char BYTE;
struct ImageComponentData
{
double value[3];
};
class MBitReader
{
public:
MBitReader(BYTE* data,int currentDataIndex)
{
Data=data;
m_currentBitPosition=8;
m_currentDataIndex=currentDataIndex;
}
BYTE* Data;
int m_currentDataIndex;
int m_currentBitPosition;
public:
int ReadNextBit()
{
--m_currentBitPosition;
if (m_currentBitPosition<0)
{
m_currentBitPosition+=8;
++m_currentDataIndex;
}
//if (m_currentDataIndex>632) theUI->label1->setText("Error!");
return ((Data[m_currentDataIndex]>>m_currentBitPosition) & 0x01);
}
void GoPreviousBit()
{
++m_currentBitPosition;
if (m_currentBitPosition>7)
{
m_currentBitPosition-=8;
--m_currentDataIndex;
}
}
int GetCurrentByte()
{
return Data[m_currentDataIndex];
}
};
class MJpegDecode
{
private:
struct _JFIFAPPOInfo
{
BYTE APP0[2]; /* 02h Application Use Marker */
BYTE Length[2]; /* 04h Length of APP0 Field */
BYTE Identifier[5]; /* 06h "JFIF" (zero terminated) Id String */
BYTE Version[2]; /* 0Bh JFIF Format Revision */
BYTE Units; /* 0Dh Units used for Resolution */
BYTE Xdensity[2]; /* 0Eh Horizontal Resolution */
BYTE Ydensity[2]; /* 10h Vertical Resolution */
BYTE XThumbnail; /* 12h Thumbnail Horizontal Pixel Count */
BYTE YThumbnail; /* 13h Thumbnail Vertical Pixel Count */
} JFIFAPPOINFO;
struct _JFIFDQTInfo
{
BYTE DQT[2]; // 14h 量化表段标记
BYTE Length[2]; // 16h 量化表段长度
BYTE Identifier; // 18h 量化表ID
BYTE QTData[64]; // 19h 量化表数据
} JFIFDQTINFO[2];
struct _JFIFSOFOInfo
{
BYTE SOFO[2]; // 9Eh 帧开始段标记
BYTE Length[2]; // A0h 帧开始段长度
BYTE BitCount; // A2h 样本精度bit位数
BYTE Height[2]; // A5h 图像像素宽度
BYTE Width[2]; // A3h 图像像素高度
BYTE ComponentsCount; // A7h 图像组件计数
BYTE YIdentifier; // A8h 亮度Y的ID号
BYTE YHVSamplingCoefficient; // A9h 亮度Y垂直和水平采样系数
BYTE YUsedDQTIdentifier; // AAh 亮度Y使用的量化表ID号
BYTE CbIdentifier; // ABh 色度Cb的ID号
BYTE CbHVSamplingCoefficient; // ACh 色度Cb垂直和水平采样系数
BYTE CbUsedDQTIdentifier; // ADh 色度Cb使用的量化表ID号
BYTE CrIdentifier; // AEh 色度Cr的ID号
BYTE CrHVSamplingCoefficient; // AFh 色度Cr垂直和水平采样系数
BYTE CrUsedDQTIdentifier; // B0h 色度Cr使用的量化表ID号
} JFIFSOFOINFO;
struct _JFIFDHTInfo
{
BYTE DHT[2]; // B1h 哈夫曼表定义段标记
BYTE Length[2]; // B3h 哈夫曼表段长度
BYTE HTIdentifier; // B5h 哈夫曼表号
BYTE NBitsSymbolsCount[16]; // B6h (符号的二进制位长度为n)的符号个数
BYTE SymbolsTable[256]; // C6h 按递增次序代码长度排列的符号表
} JFIFDHTINFO[4];
struct _JFIFSOSInfo
{
BYTE SOS[2]; // 261h 扫描开始段标记
BYTE Length[2]; // 263h 扫描开始段长度
BYTE ComponentsCount; // 265h 扫描行内组件的数量
BYTE YIdentifier; // 266h 亮度Y的ID号
BYTE YHTTableID; // 267h 亮度Y使用的哈夫曼表ID号
BYTE CbIdentifier; // 268h 色度Cb的ID号
BYTE CbHTTableID; // 269h 色度Cb使用的哈夫曼表ID号
BYTE CrIdentifier; // 26Ah 色度Cr的ID号
BYTE CrHTTableID; // 26Bh 色度Cr使用的哈夫曼表ID号
BYTE Reserved[3]; // 26Ch 3个未知保留字节
} JFIFSOSINFO;
private:
struct HuffmanTable
{
int CodeOfFirstNLengthSymbol[17]; //长度为N的第一个码字的整数值
int NLengthToSymbolsTableIndex[16]; //查表得到第一个长度为N的符号位于符号表的索引
} HUFFMANTABLE[4];
public:
int ReadJFIFInfo(const BYTE* const jfifData,int jfifDataSize);
void DecodeData(int mcuStartIndex,BYTE* jfifData,int jfifDataSize,ImageComponentData*& targetBitmapData);
void SetHuffmanTable();
void DecodeOneDUDC(MBitReader* myBitReader,double* DU,double& lastDC,int HTID);
void DecodeOneDUAC(MBitReader* myBitReader,double* DU,int HTID);
void DecodeOneMCU(MBitReader* myBitReader,int mcuXn,int mcuYn,int mcuWidth,int mcuHeight,double *DU,ImageComponentData* targetImage);
void InverseQuantization(double* du,BYTE* quantizationTable);
void InverseZigzag(double* sourceDU,double* targetDU);
void IDCT(double* sourceDU,double* targetDU);
void YCbCrToRGB(ImageComponentData* sourceImage,ImageComponentData* targetImage);
public:
int imageHeight;
int imageWidth;
int alignedImageWidth;
int alignedImageHeight;
struct HuffmanTableID
{
int dc;
int ac;
} HTID[3];
double DC[3];
int HSamplingCoefficient[3];
int VSamplingCoefficient[3];
int DQTID[3];
};
#endif // JPEGDECODE_H
获取淘宝宝贝信息_更新1
更新后的获取淘宝宝贝信息,可以模拟按键发布宝贝
获取二值图重心
根据杠杆原理获取二值图点阵重心
Type WeightPoint '受力点的重心位置和重量
X As Double
Y As Double
Weight As Long
End Type
Type LineDataStruct
O As WeightPoint '返回值 'A和B 的重心位置O和重量
AX1Y1 As WeightPoint 'A点
BX2Y2 As WeightPoint 'B点
AB As Double '线段AB的长度,A、B两点间的欧氏距离
BO As Double '线段BO的长度
'以下用于解直线方程
X1EqualX2 As Boolean '当AX1Y1.X = BX2Y2.X时True,AB两点所在直线为 x轴值=X1,否则 y轴值=l * x轴值 + d
l As Double 'y轴值=l * x轴值 + d
d As Double 'y轴值=l * x轴值 + d
'以下用于解二次方程
a As Double
b As Double
c As Double
End Type
获取淘宝宝贝信息_未完成
获取淘宝宝贝信息
问题:
【IE8是否允许网页脚本访问计算机关键位置】用WebBrowser打开淘宝宝贝页面,键鼠锁死,电脑死机
隐藏所有Windows窗口.exe
'隐藏所有Windows窗口.exe
Attribute VB_Name = "Module1"
Option Explicit
Dim AllhWnd() As Long '动态数组,用来保存取得的全部窗口的句柄
Dim AllhWnd_i, AllhWnd_j As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long '枚举窗口列表中的所有父窗口(顶级和被所有窗口)
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long '控制窗口的可见性
Const SW_HIDE = 0 '隐藏常数
Public Function EnumWindowsProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Long '这个就是回调函数,用来遍查全部窗口句柄
AllhWnd_i = AllhWnd_i + 1
ReDim Preserve AllhWnd(AllhWnd_i) '动态变量
AllhWnd(AllhWnd_i) = app_hwnd '保存句柄
EnumWindowsProc = True '循环,继续列举hwnd
End Function '注:每枚举一个窗口需调用一次回调函数
Public Function HideAllWindow() '自已定义的一个函数,用来设置全部窗口的隐藏。
EnumWindows AddressOf EnumWindowsProc, 0 '传递回调函数的指针给EnumWindows 函数。枚举窗口列表中的所有父窗口(顶级和被所有窗口)
For AllhWnd_j = 1 To AllhWnd_i
ShowWindow AllhWnd(AllhWnd_j), 5 '逐个隐藏全部窗口
Next
End Function