?? hi2bw.cpp
字號:
#include "hi2bw.h"
#include "mydefs.h"
#include "graphics.h"
#include "textout.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void hi2bw(int video, int x, int y, int dx, int dy, char* data)
{
register int i;
register int j;
register int offset = video + (y*384 + x)*2;
register short* addr;
register int value;
char r;
char g;
char b;
for(i=0; i<dy; i++)
{
addr = (short*)(offset + i*768);
for(j=0; j<dx; j++)
{
value = *addr;
b = ((value&0x001f)*0x1c)>>5;
g = ((value&0x07e0)*0x97)>>11;
r = ((value&0xf800)*0x4d)>>16;
*data = r+g+b;
data++;
addr++;
}
}
}
char Filter(char* data, int dx, int dy)
{
int i, j;
int value;
int sum = 0;
int minim = 255;
int len = 0;
for(j=0; j<dy; j++) {
for(i=1; i<dx; i++)
{
value = abs(*(data+j*dx + i-1) - *(data+j*dx+i));
if(value > 5) {
minim = min(minim, value);
sum = sum + value;
len++;
}
}
}
if(!sum) {
len = 1;
}
return ((unsigned char) (((sum-minim*len)*8)/len));
}
void ShowProgress(int video, int x, int y, unsigned char value)
{
char buff[8];
y += 32;
int delta = 256 - value;
sprintf(buff, "%-3d", value);
SetLineColor(RGB(255, 255, 255));
DrawVerLine(video, x, y, y + 256);
DrawVerLine(video, x+1, y, y + 256);
DrawVerLine(video, x+2, y, y + 256);
DrawVerLine(video, x+3, y, y + 256);
SetLineColor(RGB(127, 127, 255));
DrawVerLine(video, x, y + delta , y + 256);
DrawVerLine(video, x+1, y + delta , y + 256);
DrawVerLine(video, x+2, y + delta , y + 256);
DrawVerLine(video, x+3, y + delta , y + 256);
SetLineColor(RGB(255, 127, 127));
DrawText(video, x+10, y, buff);
}
void ShowSelectPart(int video, int x, int y, int dx, int dy, unsigned char* data)
{
int i, j;
unsigned char temp;
unsigned char value = 0;
double delta;
for(j=0; j<dy; j++)
{
for(i=0; i<dx; i++)
{
temp = *(data + j*dx + i);
if(value < temp) value = temp;
}
}
asm ("emms");
delta = 255.0 / (double)value;
for(j=0; j<dy; j++)
{
for(i=0; i<dx; i++)
{
value = *(data + j*dx + i);
value = (unsigned char)(((double)value) * delta);
SetBWPixel(video, x+i*2, y+j*2, value);
SetBWPixel(video, x+i*2+1, y+j*2, value);
SetBWPixel(video, x+i*2, y+j*2+1, value);
SetBWPixel(video, x+i*2+1, y+j*2+1, value);
}
}
}
void ClearHistogram(int video, int x, int y)
{
int i;
SetLineColor(RGB(0, 0, 0));
for(i=0; i<256; i++)
{
DrawVerLine(video, x+i, y-256, y);
}
}
void ShowHistogram(int video, int x, int y, int dx, int dy, unsigned char* data)
{
int i, j;
unsigned char value;
unsigned char buffer[256] = {0};
double delta;
SetLineColor(RGB(0, 191, 191));
for(j=0; j<dy; j++)
{
for(i=0; i<dx; i++)
{
value = *(data + j*dx + i);
buffer[value]++;
}
}
value = 0;
for(i=0; i<256; i++)
{
//value = max(buffer[i], value);
if(value<buffer[i]) value = buffer[i];
}
asm ("emms");
delta = 255.0 / (double)value;
int y1 = y-256;
for(i=0; i<256; i++)
{
value = (int)(((double)buffer[i])*delta);
SetLineColor(RGB(0, 191, 191));
DrawVerLine(video, x+i, y - value, y);
SetLineColor(RGB(255, 0, 255));
DrawVerLine(video, x+i, y1, y - value);
}
}
void ShowLineHistogram(int video, int x, int y, int dx, int dy, unsigned char* data)
{
int i, j;
int middle = (dy+1)/2;
unsigned char value = 0;
unsigned char temp;
double delta;
for(i=0; i<dx; i++)
{
temp = *(data + middle*dx + i);
if(value < temp) value = temp;
}
asm ("emms");
delta = 1.0;//255.0 / (double)value;
int y1 = y-256;
for(i=0; i<dx; i++)
{
temp = *(data + middle*dx + i);
value = (int)((double)temp*delta);
SetLineColor(RGB(0, 191, 191));
DrawVerLine(video, x+i, y - value, y);
SetLineColor(RGB(255, 127, 127));
DrawVerLine(video, x+i, y1, y-value);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -