c/c++/java/c#读取png图片

如果自己写一个读取png图片并将它用"点"的形式画在屏幕上(即知道png图像每个像素点的ARGB值)
我已经知道了怎么样用c语言以2进制读取png图片得到图像的宽高
但是对怎么判断 CRC (循环冗余检测)的具体算法不懂(如果可以请高手们详细列举出来 最好有个具体的例子)

  给你一个java的,自己改改
  import java.awt.*;
  import java.awt.image.*;
  import java.util.Random;
  import java.io.*;

  import javax.swing.*;

  public class LoadImage {

  /**
  * @param args
  */
  public static void main(String[] args) {
  String myreadline = "";
  //定义一个String类型的变量,用来每次读取一行
  try {
  FileReader fr = new FileReader("data/imagelist.txt");//创建FileReader对象,用来读取字符流
  BufferedReader br = new BufferedReader(fr); //缓冲指定文件的输入
  FileWriter fw = new FileWriter("data/17d_result.txt");//创建FileWriter对象,用来写入字符流
  BufferedWriter bw = new BufferedWriter(fw); //将缓冲对文件的输出
  while (br.ready()) {
  myreadline = br.readLine();//读取一行

  BufferedImage image = toBufferedImage(new ImageIcon("data/Image/"+myreadline).getImage());
  int height = image.getHeight();
  int width = image.getWidth();
  int r1=0, r2=0, r3=0, r4=0, r5=0, r6=0, r7=0, r8=0, r9=0, r10=0, r11=0, r12=0, r13=0, r14=0, r15=0, r16=0, r17=0;
  int g1=0, g2=0, g3=0, g4=0, g5=0, g6=0, g7=0, g8=0, g9=0, g10=0, g11=0, g12=0, g13=0, g14=0, g15=0, g16=0, g17=0;
  int b1=0, b2=0, b3=0, b4=0, b5=0, b6=0, b7=0, b8=0, b9=0, b10=0, b11=0, b12=0, b13=0, b14=0, b15=0, b16=0, b17=0;
  int rgb1=0, rgb2=0, rgb3=0, rgb4=0, rgb5=0, rgb6=0, rgb7=0, rgb8=0, rgb9=0, rgb10=0, rgb11=0, rgb12=0, rgb13=0, rgb14=0, rgb15=0, rgb16=0, rgb17=0;
  //System.out.println("Height=" + height + ", Width=" + width);
  //Random ran = new Random();
  //int x = ran.nextInt(width), y = ran.nextInt(height);
  for (int y=0;y<height;y++) {
  for (int x=0;x<width;x++) {
  Color color = new Color(image.getRGB(x, y));
  if(color.getRed()<=15)
  r1++;
  if(color.getRed()>15 && color.getRed()<=30)
  r2++;
  if(color.getRed()>30 && color.getRed()<=45)
  r3++;
  if(color.getRed()>45 && color.getRed()<=60)
  r4++;
  if(color.getRed()>60 && color.getRed()<=75)
  r5++;
  if(color.getRed()>75 && color.getRed()<=90)
  r6++;
  if(color.getRed()>90 && color.getRed()<=105)
  r7++;
  if(color.getRed()>105 && color.getRed()<=120)
  r8++;
  if(color.getRed()>120 && color.getRed()<=135)
  r9++;
  if(color.getRed()>135 && color.getRed()<=150)
  r10++;
  if(color.getRed()>150 && color.getRed()<=165)
  r11++;
  if(color.getRed()>165 && color.getRed()<=180)
  r12++;
  if(color.getRed()>180 && color.getRed()<=195)
  r13++;
  if(color.getRed()>195 && color.getRed()<=210)
  r14++;
  if(color.getRed()>210 && color.getRed()<=225)
  r15++;
  if(color.getRed()>225 && color.getRed()<=240)
  r16++;
  if(color.getRed()>240 && color.getRed()<=255)
  r17++;

  if(color.getGreen()<=15)
  g1++;
  if(color.getGreen()>15 && color.getGreen()<=30)
  g2++;
  if(color.getGreen()>30 && color.getGreen()<=45)
  g3++;
  if(color.getGreen()>45 && color.getGreen()<=60)
  g4++;
  if(color.getGreen()>60 && color.getGreen()<=75)
  g5++;
  if(color.getGreen()>75 && color.getGreen()<=90)
  g6++;
  if(color.getGreen()>90 && color.getGreen()<=105)
  g7++;
  if(color.getGreen()>105 && color.getGreen()<=120)
  g8++;
  if(color.getGreen()>120 && color.getGreen()<=135)
  g9++;
  if(color.getGreen()>135 && color.getGreen()<=150)
  g10++;
  if(color.getGreen()>150 && color.getGreen()<=165)
  g11++;
  if(color.getGreen()>165 && color.getGreen()<=180)
  g12++;
  if(color.getGreen()>180 && color.getGreen()<=195)
  g13++;
  if(color.getGreen()>195 && color.getGreen()<=210)
  g14++;
  if(color.getGreen()>210 && color.getGreen()<=225)
  g15++;
  if(color.getGreen()>225 && color.getGreen()<=240)
  g16++;
  if(color.getGreen()>240 && color.getGreen()<=255)
  g17++;

  if(color.getBlue()<=15)
  b1++;
  if(color.getBlue()>15 && color.getBlue()<=30)
  b2++;
  if(color.getBlue()>30 && color.getBlue()<=45)
  b3++;
  if(color.getBlue()>45 && color.getBlue()<=60)
  b4++;
  if(color.getBlue()>60 && color.getBlue()<=75)
  b5++;
  if(color.getBlue()>75 && color.getBlue()<=90)
  b6++;
  if(color.getBlue()>90 && color.getBlue()<=105)
  b7++;
  if(color.getBlue()>105 && color.getBlue()<=120)
  b8++;
  if(color.getBlue()>120 && color.getBlue()<=135)
  b9++;
  if(color.getBlue()>135 && color.getBlue()<=150)
  b10++;
  if(color.getBlue()>150 && color.getBlue()<=165)
  b11++;
  if(color.getBlue()>165 && color.getBlue()<=180)
  b12++;
  if(color.getBlue()>180 && color.getBlue()<=195)
  b13++;
  if(color.getBlue()>195 && color.getBlue()<=210)
  b14++;
  if(color.getBlue()>210 && color.getBlue()<=225)
  b15++;
  if(color.getBlue()>225 && color.getBlue()<=240)
  b16++;
  if(color.getBlue()>240 && color.getBlue()<=255)
  b17++;

  }
  }
  rgb1 = r1 + g1 + b1;
  rgb2 = r2 + g2 + b2;
  rgb3 = r3 + g3 + b3;
  rgb4 = r4 + g4 + b4;
  rgb5 = r5 + g5 + b5;
  rgb6 = r6 + g6 + b6;
  rgb7 = r7 + g7 + b7;
  rgb8 = r8 + g8 + b8;
  rgb9 = r9 + g9 + b9;
  rgb10 = r10 + g10 + b10;
  rgb11 = r11 + g11 + b11;
  rgb12 = r12 + g12 + b12;
  rgb13 = r13 + g13 + b13;
  rgb14 = r14 + g14 + b14;
  rgb15 = r15 + g15 + b15;
  rgb16 = r16 + g16 + b16;
  rgb17 = r17 + g17 + b17;

  //System.out.println("rect " + rgb1 + " " + rgb2 + " " + rgb3);

  bw.write("rect " + rgb1 + " " + rgb2 + " " + rgb3 + " " + rgb4 + " " + rgb5 + " " + rgb6 + " " + rgb7 + " " + rgb8 + " " + rgb9 + " " + rgb10 + " " + rgb11 + " " + rgb12 + " " + rgb13 + " " + rgb14 + " " + rgb15 + " " + rgb16 + " " + rgb17); //写入文件
  bw.newLine();
  //System.out.println(myreadline);//在屏幕上输出
  }
  bw.flush(); //刷新该流的缓冲
  bw.close();
  br.close();
  fw.close();
  br.close();
  fr.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }

  // This method returns a buffered image with the contents of an image
  public static BufferedImage toBufferedImage(Image image) {
  if (image instanceof BufferedImage) {
  return (BufferedImage) image;
  }

  // Determine if the image has transparent pixels; for this method's
  // implementation, see e661 Determining If an Image Has Transparent
  // Pixels
  boolean hasAlpha = hasAlpha(image);

  // Create a buffered image with a format that's compatible with the
  // screen
  BufferedImage bimage = null;
  GraphicsEnvironment ge = GraphicsEnvironment
  .getLocalGraphicsEnvironment();
  try {
  // Determine the type of transparency of the new buffered image
  int transparency = Transparency.OPAQUE;
  if (hasAlpha) {
  transparency = Transparency.BITMASK;
  }

  // Create the buffered image
  GraphicsDevice gs = ge.getDefaultScreenDevice();
  GraphicsConfiguration gc = gs.getDefaultConfiguration();
  bimage = gc.createCompatibleImage(image.getWidth(null), image
  .getHeight(null), transparency);
  } catch (HeadlessException e) {
  // The system does not have a screen
  }

  if (bimage == null) {
  // Create a buffered image using the default color model
  int type = BufferedImage.TYPE_INT_RGB;
  if (hasAlpha) {
  type = BufferedImage.TYPE_INT_ARGB;
  }
  bimage = new BufferedImage(image.getWidth(null), image
  .getHeight(null), type);
  }

  // Copy image to buffered image
  Graphics g = bimage.createGraphics();

  // Paint the image onto the buffered image
  g.drawImage(image, 0, 0, null);
  g.dispose();

  return bimage;
  }

  // This method returns true if the specified image has transparent pixels
  public static boolean hasAlpha(Image image) {
  // If buffered image, the color model is readily available
  if (image instanceof BufferedImage) {
  BufferedImage bimage = (BufferedImage) image;
  return bimage.getColorModel().hasAlpha();
  }

  // Use a pixel grabber to retrieve the image's color model;
  // grabbing a single pixel is usually sufficient
  PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
  try {
  pg.grabPixels();
  } catch (InterruptedException e) {
  }

  // Get the image's color model
  ColorModel cm = pg.getColorModel();
  return cm.hasAlpha();
  }

  }
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-04
C#中更简单!用System.Drawing.Bitmap(string filename)就可以创建一个图像,用Color System.Drawing.Bitmap.GetPixel(int i,int j)方法就可以得到每个点的像素值,返回一个Color值,Color为一个ARGB值,每个通道是一个字节。
如:
try
{
Bitmap bmp=new System.Drawing.Bitmap("你的图片.png")
int i,j,w,h,a,r,g,b;
w=bmp.Size.Width;
h=bmp.Size.Height;
Color color;
for(i=0;i<w;i++)
{
for(j=0;j<h;j++)
{
color=bmp.GetPixel(i,j);
a=color.A;
b=color.B;
g=color.G;
r=color.R;
//然后做你需要的处理
}
}
}
catch(Exception err)
{
//出现异常时的处理
}
第2个回答  2010-06-03
png图片得到图像的宽高

c\/c++\/java\/c#读取png图片
import java.util.Random;import java.io.*;import javax.swing.*;public class LoadImage { \/ param args \/ public static void main(String[] args) { String myreadline = "";\/\/定义一个String类型的变量,用来每次读取一行 try { FileReader fr = new FileReader("data\/imagelist.txt");\/\/创...

200分c\/c++\/java\/c#读取png图片
int a = c.A;\/\/该像素的Alpha通道值 int r = c.R;\/\/该像素的红色通道值 int g = c.G;\/\/该像素的绿色通道值 int b = c.B;\/\/该像素的蓝色通道 那建议你上网查一查PNG格式的标准,就知道PNG文件里的数据排列了。但PNG是压缩过的,所以你还得有解压算法才行。png的存储格式:关键数据...

如何通过c\/c++通过大华SDK采集一帧图像?
大华等摄像头生产厂商,那么你去他们的官方网站下载sdk包,然后通过调用动态链接库的方式调用函数就行了。不过有很多动态链接库是C++写的,所以你可能要查找关于C#如何调用C++编写的动态链接库的方法,其实也就是一些变量类型的转换问题。

C、C++、VC++、Java、C#之间有何异同
VC++是Microsoft Visual C++的简称,它是C++语言的集成开发环境,提供了一套强大的工具集,方便开发者进行高效开发。C#是Microsoft开发的一种面向对象的、托管型、安全性极高的编程语言,它运行在.NET Framework上,与Java一样属于高级语言。从应用领域来看,C和C++因其底层控制能力和高效性,在系统级开发...

考国家软件设计师,用的语言一定是C\/C++吗,C#可以吗?
一般是第四题算法,第五题面向对象 因为都是填空题,语言就不能随意了,第四题算法题一般是C,第五题由于考面向对象,一般是C++ \/java 所以C#和VB 都不行的 无论什么时候考试C\/C++都是必修的...具体你可以下载历年考试真题来看看,我的理解是语言是次要的,不就是表述的问题吗,换种写法,程序设计的思...

用C\/C++写程序,调用笔记本自带摄像头获取图片
IplImage* frame;while(1) { frame = cvQueryFrame(capture);if(!frame) break;cvShowImage("win", frame);char c = cvWaitKey(50);if(c==27) break;} cvReleaseCapture(&capture);cvDestroyWindow("win");return 0;} 以上是代码,具体opencv库的安装配置网上很多的,你自己搜下配置好就可以。

关于C#,C,C++,JAVA的开发效率的比较,举例子说明。
c,c++,java实质上速度差不多,举个例子,比方说,c,c++,java都是纯写代码开发的,而c#就效仿VB,直接界面开发,并且支持开发windows application,连安装程序卸载程序都预编好了。当然快多了。c得写#include(包含预编译类库函数),c++也是,java不用,所以java好一点,但是看代码简洁程度,c、c++...

C、C++、C#、java主要用途?他们分别用在哪个领域?
C\/C++主要应用于嵌入式系统开发,Windows应用程序开发。JAVA主要应用于web应用程序开发(做网站),安卓手机平台应用程序开发。C#主要应用于Windows桌面应用程序开发,还有WP平台的应用程序开发。

VB,C,C++,C#,java,html,这几种语言各有什么区别,有好评哦。
vb是一个可视化的编程工具,而c和c++则是语言,没有可比性,除非你用basic和c比,或是vb和vc比的话,b的底层技术没有c强,如果你要编写诸如杀毒,输入法,优化工具,网络工具,驱动等等,VC的优势很大。如果编写诸如基于数据库方面的软件,如员工管理,企业财务管理等等,VB的开发效率能比VC的优势大一...

C,C++,C#,Java分别擅长开发什么方面的软件?
c语言擅长开发系统程序、驱动程序、实现复杂的算法和对性能要求很高的程序,也可以用于嵌入式开发(如单片机)和需要直接访问硬件(通过嵌入汇编代码)的软件的开发。c++也可以开发系统程序和开发性能很高的应用程序,如游戏引擎。c#和java一般用于开发各种类型的应用程序,如网络程序、游戏程序等。

相似回答