Thursday, 15 September 2011

windows - Delphi write pixel colors to memo -


I want to create a program that can write my TImage pixels RGB color in a memo, the program does not know the resolution.

How do I retrieve every pixel color in String Variable (R, G, B)?

Code

  var Image_width, Image_height, X, Y, I, i2: integer; Color: TColor; Start Image_width: = Image1.Width; IMAGE_HEIGHT: = Image1.Height; Memo1.text: = '$ image_width = *' + IntToStr (Image_Width) + '$$ image_height =' + IntToStr (image_hett) + '* $'; X: = 1; Y: = 1; I: For = 1 image_method starting for i2: = 1 start image_highlight color: = image 1. Canvas. Pixel [x, y]; Memo1.Text: = memo1.Text + ColorToString (Color); Y: = y + 1; End; X: = x + 1 end; End  

| Edited |

  Process TForm1.Button2Click (Sender: Tubbed); Var image_width, image_height, x, y: integer; Color: TColor; S: string; Start Image_width: = Image1.Width; IMAGE_HEIGHT: = Image1.Height; Memo1.text: = '$ image_width = *' + IntToStr (Image_Width) + '* $ $ image_height = *' + IntToStr (image_hett) + '* $'; X: = 0; Y: = 0; Memo1.Lines.BeginUpdate; Start from X: = 0 to Image_width y: Let's start Image_height from = 0; Color: = Image1.Canvas.Pixels [x, y]; Memo1.Text: = Memo1.Text + ColorToString (Color); End; Memo1.Lines.EndUpdate; End; End;  

It is very slow, I think a 640x480 picture with the 1940s. And after the program was ready, and it was placed on memo 1, I'm seeing something in memo 1, but the program "is not responding again" ..

I have tried Try those variables, and the program does the same.

First Correction , Pixel 0 starts with 0. no , 1 as you have Change the initial value to for loops as the following:

  x: = 0; // no 1; Y: = 0; // no 1;  

Actually, there is no need to assign y to this point as we will see soon.

Second Correction , look for the internal to loop 1 from the image_hete i2 step and y are incremented in each round of loop, which is fine is. Then a trip to the external loop pay scale x and we come back to the inner loop. What happens to y? It was previously stopped, where it was previously reset to 0. The treatment is to add a line as follows. This is also the reason why the above assignment is redundant.

  i: i = 1 to start Image_width y: = 0; // Add this line to I2: Starting image_height from = 1  

Suggestions for improvement

It is not clear if If you mean Color Depth or Bit Per Pixel, then it may be that the approach using your pixels is more straight forward: resolution is unknown. . Otherwise, as suggested in the comments, you may consider using Scanline instead of pixels for quick access to actual bitmap data. For an excellent article, see:

Repeatedly adding color string to the text property is very slow. In fact it was so slow with the 64 x 64 pixel image that I Could not wait to walk till the end. To speed it up, you can use a different string variable, in which you add color string

  color: = Image1.Canvas.Pixels [x , Y]; S: = s + ColorToString (color);  

and then by adding the text to the text property

  memo1.Text: = memo1.Text + s;  

If you intend to add each pixel color string as a new line in the memo, you can change the Add method

  Color: = Picture 1. Canvas. Pixel [x, y]; Memo1.Lines.Add (ColorToString (Color));  

for with loops memo1.Lines.BegginUpdate; and memo1.Lines.EndUpdate; Further speed improves.

Finally, you can just do the right thing, either use x and y such as loop control variables or i As a pixel indexed I will have to switched i and i2 and both the code controls and the pixel index as both < Code> x and y . But I leave it for you to decide.


No comments:

Post a Comment