I'm using stm32f4 connect to ov7670 (without FIFO) to capture a image (176x144, RGB565). After capture image, stm will send data to PC via UART-COM. I have written a program using C# to read data from com port and display as image. But I have problem with view I get:
Here is my C# code:
using System.Drawing;
using System.Windows.Forms;
namespace camview
{
public partial class Form1 : Form
{
Bitmap bmp = new Bitmap(176, 144);
public Form1()
{
InitializeComponent();
serialPort1.Open();
}
void setbmp(Bitmap bmp, int x, int y, int a, int b)
{
int tmp = (a << 8) | b;
int red = tmp >> 11;
int green = (tmp >> 5) & 0x3f;
int blue = tmp & 0x1f;
bmp.SetPixel(x, y, Color.FromArgb(red * 8, green * 4, blue * 8));
}
private void button1_Click(object sender, System.EventArgs e)
{
string s = "";
while (s != "OK\r")
{
s = serialPort1.ReadLine();
richTextBox1.Text += s;
}
richTextBox1.Text += "Start\n";
for (int i = 0; i < 144; i++)
for (int j = 0; j < 176; j++)
{
int a = serialPort1.ReadByte();
int b = serialPort1.ReadByte();
//richTextBox1.Text += a + ' ' + b + ' ';
setbmp(bmp, j, i, a, b);
}
pictureBox1.Image = bmp;
}
}
}
These is my config for ov7670 reg:
I2C_writereg(0x12, 0x80); // reset all reg
I2C_writereg(0x11, 0xc0); //set CLKRC
I2C_writereg(0x12, 0x0c); // set output QCIF, RGB
I2C_writereg(0x70, 0x3a); // scaling
I2C_writereg(0x71, 0x35);
I2C_writereg(0x8c, 0x00); // disable RGB444
I2C_writereg(0x40, 0xd0); // enable RGB565, output range from 00 to FF
I2C_writereg(0x0c, 0x4c); //