电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

printscreen读取位图转为jpeg格式输出


发布日期:2023/1/1
 

package screensaver;

import javaawt*;

import javaawtimageBufferedImage;

import javaio*;

import javautil*;

import decjpeg*;

import javaawtImage;

import javaawtToolkit;

import javaawtimageBufferedImage;

import javaawtimageMemoryImageSource;

import javaioFileInputStream;

import javaioFileOutputStream;

import decjpegJPEGCodec;

import decjpegJPEGImageEncoder;

public class ScreenPicSaver

{

MediaTracker tracker = new MediaTracker(new Component()

{});

public ScreenPicSaver()

{}

public Image loadbitmap(String sdir String sfile) //读取位或位的位图文件

{

Image image;

Systemoutprintln(loading: + sdir + sfile);

try

{

FileInputStream fs = new FileInputStream(sdir + sfile);

int bflen = ; // 字节 BITMAPFILEHEADER

byte bf[] = new byte[bflen];

fsread(bf bflen);

int bilen = ; // 字节 BITMAPINFOHEADER

byte bi[] = new byte[bilen];

fsread(bi bilen);

// 解释数据

int nsize = ( ( (int) bf[] & xff) < <)

| ( ( (int) bf[] & xff) < <)

| ( ( (int) bf[] & xff) < <)

| (int) bf[] & xff;

Systemoutprintln(File type is : + (char) bf[] + (char) bf[]);

Systemoutprintln(Size of file is : + nsize);

int nbisize = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(Size of bitmapinfoheader is : + nbisize);

int nwidth = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(Width is : + nwidth);

int nheight = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(Height is : + nheight);

int nplanes = ( ( (int) bi[] & xff) < <) | (int) bi[] & xff;

Systemoutprintln(Planes is : + nplanes);

int nbitcount = ( ( (int) bi[] & xff) < <) | (int) bi[] & xff;

Systemoutprintln(BitCount is : + nbitcount);

// 查找表明压缩的非零值

int ncompression = ( ( (int) bi[]) < <)

| ( ( (int) bi[]) < <)

| ( ( (int) bi[]) < <)

| (int) bi[];

Systemoutprintln(Compression is : + ncompression);

int nsizeimage = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(SizeImage is : + nsizeimage);

int nxpm = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(XPixels per meter is : + nxpm);

int nypm = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(YPixels per meter is : + nypm);

int nclrused = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(Colors used are : + nclrused);

int nclrimp = ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| ( ( (int) bi[] & xff) < <)

| (int) bi[] & xff;

Systemoutprintln(Colors important are : + nclrimp);

if (nbitcount == )

{

// 位格式不包含调色板数据但扫描行被补足到

// 个字节

int npad = (nsizeimage / nheight) nwidth * ;

int ndata[] = new int[nheight * nwidth];

byte brgb[] = new byte[ (nwidth + npad) * * nheight];

fsread(brgb (nwidth + npad) * * nheight);

int nindex = ;

for (int j = ; j <nheight; j++)

{

for (int i = ; i <nwidth; i++)

{

ndata[nwidth * (nheight j ) + i] =

( & xff) < <

| ( ( (int) brgb[nindex + ] & xff) < <)

| ( ( (int) brgb[nindex + ] & xff) < <)

| (int) brgb[nindex] & xff;

/** Systemoutprintln(Encoded Color at (

+i + + j + )is: + nrgb + (RGB)= (

+ ( (int) (brgb[]) & xff) +

+ ( (int) brgb[] & xff) +

+ ( (int) brgb[] & xff) + ));

}*/

nindex += ;

}

nindex += npad;

}

image = ToolkitgetDefaultToolkit()createImage

(new MemoryImageSource(nwidth nheight

ndata nwidth));

}

else if (nbitcount == )

{

// 必须确定颜色数如果 clrsused 参数大于

// 则颜色数由它决定如果它等于 则根据

// bitsperpixel 计算颜色数

int nNumColors = ;

if (nclrused > )

{

nNumColors = nclrused;

}

else

{

nNumColors = ( & xff) < <nbitcount;

}

Systemoutprintln(The number of Colors is + nNumColors);

// 某些位图不计算 sizeimage 域请找出

// 这些情况并对它们进行修正

if (nsizeimage == )

{

nsizeimage = ( ( ( (nwidth * nbitcount) + ) & ~) >> );

nsizeimage *= nheight;

Systemoutprintln(nsizeimage (backup) is + nsizeimage);

}

// 读取调色板颜色

int npalette[] = new int[nNumColors];

byte bpalette[] = new byte[nNumColors * ];

fsread(bpalette nNumColors * );

int nindex = ;

for (int n = ; n <nNumColors; n++)

{

npalette[n] = ( & xff) < <

| ( ( (int) bpalette[nindex + ] & xff) < <)

| ( ( (int) bpalette[nindex + ] & xff) < <)

| (int) bpalette[nindex] & xff;

/**Systemoutprintln (Palette Color +n

+ is: + npalette[n] + (resRGB)= (

+ ( (int) (bpalette[nindex + ]) & xff) +

+ ( (int) (bpalette[nindex + ]) & xff) +

+ ( (int) bpal

上一篇:int、char、double与byte相互转换的程序

下一篇:一个程序员的奋斗历程